用TableView寫了一個登陸界面,帳號和密碼兩個Cell中加入了TextField。由于想在TableView的空白處點擊時收起鍵盤,所以他注冊了一個UITapGestureRecognizer來識別手勢。

ViewDidLoad中注冊手勢的部分代碼如下:
~~~
UITapGestureRecognizer?*oneTap?=?[[[UITapGestureRecognizer?alloc]?initWithTarget:self?action:@selector(hideKeyBoard)]?autorelease];??
oneTap.delegate?=?self;??
oneTap.numberOfTouchesRequired?=?1;??
[self.view?addGestureRecognizer:oneTap];??
~~~
其中hideKeyBoard方法就省略了,基本就是幾個resignFirstResponder。
然后發生了一個奇怪的現象,點擊“找回密碼”那一欄時沒有反應了!!!
調試后我發現委托方法
- (void)tableView:(UITableView?*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath不執行了。
目測原因是UITapGestureRecognizer截獲了touch事件,導致didSelectRowAtIndexPath方法無法響應。
查閱了相關文檔后找到了一種可行的解決方法:重寫UIGestureRecognizerDelegate中的
- (BOOL)gestureRecognizer:(UIGestureRecognizer?*)gestureRecognizer shouldReceiveTouch:(UITouch?*)touch方法。
~~~
#pragma?mark?-?UIGestureRecognizerDelegate??
-?(BOOL)gestureRecognizer:(UIGestureRecognizer?*)gestureRecognizer?shouldReceiveTouch:(UITouch?*)touch??
{??
????//?輸出點擊的view的類名??
????NSLog(@"%@",?NSStringFromClass([touch.view?class]));??
??????
????//?若為UITableViewCellContentView(即點擊了tableViewCell),則不截獲Touch事件??
????if?([NSStringFromClass([touch.view?class])?isEqualToString:@"UITableViewCellContentView"])?{??
????????return?NO;??
????}??
????return??YES;??
}??
~~~
再次調試,這回didSelectRowAtIndexPath響應了,解決UITapGestureRecognizer手勢截獲Touch事件的問題!
- 前言
- iOS開發中@2x等后綴的圖片干嘛用的
- 上傳APP至AppStore時打包出現U option must have a non-empty value
- UIbutton文字相關
- 將UIview的image保存到本地的方法
- 百度推送iOS
- 靜態庫的封裝
- 提高IOS開發效率的工具
- iOS開發筆記6:圖片輪播及其無限循環效果,ios筆記
- ABPeoplePickerNavigationController系統通訊錄使用
- iOS中添加UITapGestureRecognizer手勢識別后,UITableView的didSelectRowAtIndexPath失效
- ios搭一個簡易計算器(利用masonry布局)