检测UIScrollView中的命中,同时仍然让它做到这一点

时间:2011-01-09 01:15:58

标签: iphone uiscrollview

是否有一种简单的方法可以检测是否有人触摸了UIScrollView而无需禁用用户交互?

我知道之前已经回答了几次,但我找到的每个答案都是有人想要检测图像中的命中。我没有图像。我所拥有的是一个滚动视图,其中嵌入了许多文本字段。他们曾经在UIControl中,我可以从中检测到touchDown并在我的所有文本字段上调用resignFirstResponder(当键盘启动时)。但是当他们在UIScrollView中时,我似乎无法找到一种简单的方法来执行此操作。

我真的不想编写代码来自己滚动,这就是我假设我必须要做的事情,如果我禁用用户交互并抓住touchesBegan消息。但我可能错了。我还是有点新鲜,但这是我第一次通过阅读代码文档和google搜索来找不到答案......

感谢您的帮助,

Ĵ

3 个答案:

答案 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