是否有一种简单的方法可以检测是否有人触摸了UIScrollView而无需禁用用户交互?
我知道之前已经回答了几次,但我找到的每个答案都是有人想要检测图像中的命中。我没有图像。我所拥有的是一个滚动视图,其中嵌入了许多文本字段。他们曾经在UIControl中,我可以从中检测到touchDown并在我的所有文本字段上调用resignFirstResponder(当键盘启动时)。但是当他们在UIScrollView中时,我似乎无法找到一种简单的方法来执行此操作。
我真的不想编写代码来自己滚动,这就是我假设我必须要做的事情,如果我禁用用户交互并抓住touchesBegan消息。但我可能错了。我还是有点新鲜,但这是我第一次通过阅读代码文档和google搜索来找不到答案......
感谢您的帮助,
Ĵ
答案 0 :(得分:2)
覆盖touchesBegan,进行处理,并调用超级实现,以便滚动视图仍然可以获取消息。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//call resignFirstResponder
[super touchesBegan:touches withEvent:event];
}
答案 1 :(得分:0)
好的,现在我觉得自己有点傻了。我确定其他建议的答案也会起作用,但我在浏览其他主题时发现了其他一些内容,这对我来说是完全固定的。
我将此添加到我的viewDidLoad:
UITapGestureRecognizer * singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgroundTap :)];
[scrollView addGestureRecognizer:singleTap];
其中backgroundTap是
- (IBAction)backgroundTap:(id)sender
是我最初在UIControl中从touchDown调用的函数,用于重新签名所有键盘firstResponders。
这非常有效并且添加的代码非常少。而且我不必禁用用户交互!耶!
感谢大家的意见和帮助。
Ĵ
答案 2 :(得分:0)
我摆弄了一段时间,发现简单的触摸开始和触摸端类型的东西并没有真正起作用。
由于手势,它们不起作用。例如,当您滑动滚动时(至少不在UIScrollView中),touchesEneded永远不会触发。因此,虽然您可以检测触摸事件何时开始,但您永远不会知道它何时结束。
我并不是真的热衷于为简单的东西包含一个手势识别器,并发现你可以直接从与UIScrollView的交互中找到更好的滚动状态。
并不是那么痛苦。只需添加协议,然后添加检测所需的功能。
在包含UIScrolView的视图(类)中,添加协议,然后将here中的所有函数添加到视图(类)中。
示例:
// --------------------------------
// In the "h" file:
// --------------------------------
@interface myViewClass : UIViewController <UIScrollViewDelegate> // <-- Adding the protocol here
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView;
// --------------------------------
// In the "m" file:
// --------------------------------
@implementation BlockerViewController
UIScrollView *scrollView;
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
NSLog(@"end decel");
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
NSLog(@"end dragging");
}
// All of the available functions are here:
// https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScrollViewDelegate_Protocol/Reference/UIScrollViewDelegate.html