使用UITapGestureRecognizer时出现问题

时间:2011-05-10 18:53:42

标签: iphone subclass uigesturerecognizer uitapgesturerecognizer

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

另外,我玩了很多,似乎无法弄明白。

5 个答案:

答案 0 :(得分: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日更新----

对于那些喜欢使用storyboard / nib的人来说,这非常简单!

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

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

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

  4. 你已经完成了!enter image description here

答案 1 :(得分:2)

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

gestureRecognizer.delegate = self;
例如,

。然后在标题中采用UIGestureRecognizerDelegate协议。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

我想你可能遇到过同样的问题。当你调用[yourCustomView addGestureRecognizer:tapRecognizer]时;你需要在你的例子中通过UIView *引用 尝试:

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

希望这会有所帮助。

答案 4 :(得分:1)

请检查view.userInteractionEnabled=true;