UITapGestureRecognizer 的问题

Posted

技术标签:

【中文标题】UITapGestureRecognizer 的问题【英文标题】:Issue with a UITapGestureRecognizer 【发布时间】:2011-05-10 18:53:42 【问题描述】:

我有一个主视图控制器,它叫做WelcomeViewController。我有一个 UIView 子类,其中有一些与视图相关的东西。我想为该子类添加一个UITapGestureRecognizer。我只希望手势识别器确认该子视图内的点击。我怎么做。我应该把UITapGestureRecognizer 放在子类中还是应该把它放在Welcome vc 中。提前致谢。

另外,我玩过很多次,但似乎无法弄清楚。

【问题讨论】:

【参考方案1】:

这取决于您是要在自定义视图对象还是视图控制器中处理点击。

如果在视图中,请将其添加到它的 init 或其他适当的位置:

UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[self addGestureRecognizer:tapRecognizer];
[tapRecognizer release];

如果在视图控制器中,请将其添加到viewDidLoad(或其他适当的位置):

UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[yourCustomView addGestureRecognizer:tapRecognizer];
[tapRecognizer release];

处理程序相同:

- (void)handleTap:(UITapGestureRecognizer*)recognizer

    // Do Your thing. 
    if (recognizer.state == UIGestureRecognizerStateEnded)
    
    

看看SimpleGestureRecognizers的例子,你应该会有一个很好的想法。

---- 2012 年 10 月 1 日更新----

对于那些喜欢使用故事板/笔尖的人来说,这超级简单!

    打开你的故事板/笔尖。

    将您想要的识别器类型从对象库拖放到您想要的 UI 元素上。

    右键单击识别器对象,然后将其selector 连接到文件所有者中的 IBAction(通常是 UIViewController)。如果需要,也可以连接委托。

    李>

    大功告成!

【讨论】:

我对这一切都很满意。问题是我将 UIView 子类化到我的主视图中。现在,我将 UITapGestureRecognizer 添加到哪个视图。子视图(不起作用)或主视图(当我点击任何地方时,它可以工作,包括子视图之外) 我已经完善了我的答案。这对你的情况更有意义吗? 您的主视图可能不会将事件传递给子视图。此外,您可以检查触摸点是否在子视图框架中。 如何检查接触点是否在子视图中。我想我会这样做,然后从中调用另一个类中的方法。 @sdjuan,在故事板中添加手势识别器更加简单!我已经更新了我的帖子以包含它。希望有帮助!【参考方案2】:

我认为您需要将手势识别器的委托设置为您想要处理点击的任何视图控制器。

gestureRecognizer.delegate = self;

例如。然后在你的 header 中采用 UIGestureRecognizerDelegate 协议。

【讨论】:

【参考方案3】:

您可以选择UITapGestureRecognizer 的接收者,它不必与实例化识别器的类相同(即self)。如果您在WelcomeViewConroller 中创建它,您可以选择任何子视图来接收事件:

[tapRecognizer addTarget:aSubview action:@selector(myMethod:)];

【讨论】:

不,那部分我很好。我将手势识别器添加到哪个子视图。 响应点击的子视图。【参考方案4】:

我想你可能遇到了和我一样的问题。当您调用 [yourCustomView addGestureRecognizer:tapRecognizer];您需要通过 UIView * 引用,因此在您的示例中 试试:

UIView *mySubView = yourCustomView; 
[mySubView addGestureRecognizer:tapRecognizer];

希望这会有所帮助。

【讨论】:

【参考方案5】:

请查看view.userInteractionEnabled=true;

【讨论】:

以上是关于UITapGestureRecognizer 的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 UITapGestureRecognizer 无法识别的选择器

UIlabel 中的 UITapGestureRecognizer 错误

UITapGestureRecognizer 的问题

带有点击事件的 UITapGestureRecognizer

UIButton 上的 UITapGestureRecognizer

为啥 UIButton 会覆盖 UITapGestureRecognizer?