#import <objc/runtime.h>
// 利用runtime來替換展現(xiàn)彈出框的方法
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:));
// 交換方法實現(xiàn)
method_exchangeImplementations(presentM, presentSwizzlingM);
});
// 自己的替換展示彈出框的方法
- (void)ox_presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {
if ([viewControllerToPresent isKindOfClass:[UIAlertController class]]) {// 要彈出的是UIAlertController
// 輸出到控制到可以發(fā)現(xiàn)兩者都是null
NSLog(@"title : %@",((UIAlertController *)viewControllerToPresent).title);
NSLog(@"message : %@",((UIAlertController *)viewControllerToPresent).message);
// 換圖標(biāo)時的提示框的title和message都是nil脚仔,由此可特殊處理
UIAlertController *alertController = (UIAlertController *)viewControllerToPresent;
if (alertController.title == nil && alertController.message == nil) {// 是換圖標(biāo)的提示
return;
} else {// 其他提示還是正常處理
[self ox_presentViewController:viewControllerToPresent animated:flag completion:completion];
return;
}
}
// 其他的彈出還是正常處理
[self ox_presentViewController:viewControllerToPresent animated:flag completion:completion];
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者