IOS / Objective-C:检测文本字段触摸但排除基础滚动视图的点击

时间:2017-11-08 16:18:39

标签: ios objective-c uiscrollview uitextfield

我有一个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];来阻止此行为。

任何人都可以建议一种方法来检测文本字段触摸以显示键盘而不会导致滚动视图识别点击,或者仅在触摸屏幕的空白部分时才解除键盘。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

您可以使用以下内容查看点击来自哪个视图:

./config.[yaml|toml|json]