iOS 如何解決沒法將鍵盤隱藏

問題:
佈局

在一個父視圖上添加了UITableView以及一個UITextView(UITextView爲底部,其他爲UITableView的佈局)。當點擊UITextView的時候,響應正常。當結束寫入的時候,須要調用[UITextView resignFirstResponder]來隱藏鍵盤。這就致使,沒法收起鍵盤。
spa

緣由:code

當點擊UITableView的時候,所觸發非UITextView的時候,也就是觸摸的是UITableView。當手指touch的時候,響應鏈便開始從視圖的頂部往下響應。當它到達UITableView的時候,UItableView是繼承UIScrollewView的,因此,這個信號被UITableView所響應,也就是執行了UITableView的touch方法。因此,UITextView就沒法響應。
繼承

解決辦法:it

給UITableView作擴展,讓其過濾第一次響應:io

@implementation UITableView (UITouch)

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesBegan:touches withEvent:event];
    [super touchesEnded:touches withEvent:event];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesMoved:touches withEvent:event];
    [super touchesEnded:touches withEvent:event];
    
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesEnded:touches withEvent:event];
    [super touchesEnded:touches withEvent:event];
}

@end

在須要的地方,導入這個。
event

在該類中調用,並判斷是否是這個UITableView,若是不是,那就能夠收起鍵盤了。table

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];
    UITableView *teableView = (UITableView *)[touches anyObject];
    if (teableView != self.tableView) {
        [textView resignFirstResponder];
    }
}

=============================================class

還有一種方法,不太建議使用。擴展

也就是在鍵盤彈起的時候,在最上層放一個可點擊的View,便可。

相關文章
相關標籤/搜索