問題:
佈局
在一個父視圖上添加了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,便可。