UIAlertController 實現UITextField校驗(點擊確認不消失)

效果圖

UIAlertController 點擊確認時候會消失,無法校驗是否輸入,所以在他dismiss前要先做校驗

通過小技巧(點擊確認在block中添加一個數組,使其崩潰)找到以下兩個方法(系統版本不同)

_dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:dismissCompletion:
_dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:

hook掉以上兩個方法

#import <JRSwizzle/JRSwizzle.h>

#pragma mark - Private

+ (void)load {
    
    SEL originalSelector = nil;
    SEL swizzledSelector = nil;
    
    // _dismissAnimated
    originalSelector = NSSelectorFromString(@"_dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:dismissCompletion:");
    swizzledSelector = @selector(tm_dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:dismissCompletion:);
    [UIAlertController jr_swizzleMethod:originalSelector withMethod:swizzledSelector error:nil];
    
    originalSelector = NSSelectorFromString(@"_dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:");
    swizzledSelector = @selector(tm_dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:);
    [UIAlertController jr_swizzleMethod:originalSelector withMethod:swizzledSelector error:nil];
}

- (void)tm_dismissAnimated:(BOOL)flag triggeringAction:(UIAlertAction *)action triggeredByPopoverDimmingView:(id)view dismissCompletion:(void (^)(void))completion {
    // 保證點擊取消依舊可以消失
    if (action.style != UIAlertActionStyleCancel) {
        for (UITextField *textField in self.textFields) {
            if ([textField.text isEqualToString:@""]) {
                [textField placeholderShake]; // placeholder 抖動動畫
                return;
            }
        }
    }
    
    [self tm_dismissAnimated:flag triggeringAction:action triggeredByPopoverDimmingView:view dismissCompletion:completion];
}

- (void)tm_dismissAnimated:(BOOL)flag triggeringAction:(UIAlertAction *)action triggeredByPopoverDimmingView:(id)view {
    // 保證點擊取消依舊可以消失
    if (action.style != UIAlertActionStyleCancel) {
        for (UITextField *textField in self.textFields) {
            if ([textField.text isEqualToString:@""]) {
                [textField placeholderShake]; // placeholder 抖動動畫
                return;
            }
        }
    }
    
    [self tm_dismissAnimated:flag triggeringAction:action triggeredByPopoverDimmingView:view];
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Swift1> Swift和OC的區別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,136評論 1 32
  • AOP簡介 AOP全名為 Aspect Oriented Programming- 面向切面編程。AOP是OOP(...
    lyuf閱讀 798評論 0 0
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,200評論 4 61
  • 很多人早晨都喜歡喝豆漿吃油條,但也有一部分人發現即使是家里煮沸了豆漿,喝了也會有中毒的跡象。那么,什么樣的豆漿能喝...
    舒樂泰閱讀 359評論 0 0
  • 是時候該寫點什么了。 忘記了上一次認認真真的寫一篇文章是什么時候,只是腦海里覺得已經很久沒有去記錄一下生活了。明天...
    墨離c閱讀 203評論 0 0