#import- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; // 利用runtime来替换展现弹出框的方法 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ Method presentM = class_getInstanceMethod(self.class, @selector(presentViewController:animated:completion:)); Method presentSwizzlingM = class_getInstanceMethod(self.class, @selector(ox_presentViewController:animated:completion:)); // 交换方法实现 method_exchangeImplementations(presentM, presentSwizzlingM); });}// 自己的替换展示弹出框的方法- (void)ox_presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion { if ([viewControllerToPresent isKindOfClass:[UIAlertController class]]) {// 要弹出的是UIAlertController // 输出到控制到可以发现两者都是null NSLog(@"title : %@",((UIAlertController *)viewControllerToPresent).title); NSLog(@"message : %@",((UIAlertController *)viewControllerToPresent).message); // 换图标时的提示框的title和message都是nil,由此可特殊处理 UIAlertController *alertController = (UIAlertController *)viewControllerToPresent; if (alertController.title == nil && alertController.message == nil) {// 是换图标的提示 return; } else {// 其他提示还是正常处理 [self ox_presentViewController:viewControllerToPresent animated:flag completion:completion]; return; } } // 其他的弹出还是正常处理 [self ox_presentViewController:viewControllerToPresent animated:flag completion:completion];}复制代码