【发布时间】:2018-04-21 10:19:35
【问题描述】:
我有一个UIViewController,其中包含一个UIScrollView,它占据了整个VC,并且在UIScrollView 中包含了包括许多文本字段在内的各种元素。
我有一个关闭键盘的通用方法,如果您点击滚动视图上的任意位置,键盘将按如下方式关闭:
in viewdidload:
UITapGestureRecognizer *tapScroll = [[UITapGestureRecognizer alloc]initWithTarget:self
action:@selector(tapped)];
tapScroll.cancelsTouchesInView = NO;
tapScroll.delegate = self;
[self.scrollView addGestureRecognizer:tapScroll];
- (void) tapped
{
NSLog(@"tapped on scrollview");
[self.view endEditing:YES];
}
问题在于,当您单击UITextField 时,有相当一部分时间会触发点击方法,因为对文本字段的点击也会注册为对底层滚动视图的点击。这样可以防止键盘出现,因此您无法在键盘中输入任何内容。 (我可以通过在 tapped 方法中注释掉 [self.view endEditing:YES]; 来防止这种行为)。
任何人都可以建议一种方法来检测文本字段触摸以显示键盘而不导致滚动视图识别点击,或者仅在触摸屏幕的空白部分时关闭键盘。
感谢您的任何建议。
【问题讨论】:
-
查看其他问题,例如stackoverflow.com/questions/5222998/…,了解有关使用子视图处理手势的信息。
标签: ios objective-c uiscrollview uitextfield