我是iOS开发的新手。我想在UITextView外部点击时隐藏键盘。 我的TextView位于UITableView的单元格中。问题是我的顶部有一个工具栏,我的按钮不再响应。我实现了方法“shouldReceiveTouch”,但我认为我的测试不正确。有任何想法吗?谢谢你,抱歉我的英文不好......
在我的ViewDidLoad中:
tap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(dismissKeyboard)];
tap.delegate = self;
[self.view addGestureRecognizer:tap];
注意:tap是一个UITapGestureRecognizer属性。
已实施方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UIBarButtonItem class]]) {
return NO;
}
return YES;
}
-(void)dismissKeyboard {
[tview resignFirstResponder];
}
答案 0 :(得分:1)
UIBarButtonItem不是UIView的子类,因此shouldReceiveTouch仍然返回YES。
在cellForRowAtIndexPath中初始化单元格时,尝试排除整个UIToolbar或只在UITableViewCell中添加点击手势识别器。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UIToolbar class]]) {
return NO;
}
return YES;
}
答案 1 :(得分:0)
使用UIScrollView委托的didScroll方法来重新签名keyboard.TableView也是UIScrollView的子类,所以它应该可以工作。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[tview resignFirstResponder];
}
或使用此
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[tview resignFirstResponder];
}
如果您仍想使用手势,则将手势添加到UIView或self.view或tableView的superView 而不是将其添加到tableView
请尝试以下代码:----
保持代码不变并添加此方法
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[tview resignFirstResponder];
}
答案 2 :(得分:0)
您应该将手势添加到表格视图中。
tap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(dismissKeyboard)];
tap.delegate = self;
[tblView addGestureRecognizer:tap];
答案 3 :(得分:0)
在viewDidLoad中设置self.view.userInteractionEnabled = yes;
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
if ([touch view] == tview) {
[tview resignFirstResponder];
}
}