7

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

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

4

5 回答 5

18

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

如果在视图中,请将其添加到它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 日更新----

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

  1. 打开你的故事板/笔尖。

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

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

  4. 你完成了!在此处输入图像描述

于 2011-05-10T19:08:01.030 回答
2

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

gestureRecognizer.delegate = self;

例如。然后在您的标头中采用 UIGestureRecognizerDelegate 协议。

于 2011-05-10T19:18:08.560 回答
1

请检查view.userInteractionEnabled=true;

于 2013-06-11T06:15:18.623 回答
1

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

[tapRecognizer addTarget:aSubview action:@selector(myMethod:)];
于 2011-05-10T19:05:08.763 回答
1

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

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

希望这可以帮助。

于 2011-05-26T17:48:31.737 回答