在Interface Builder中使用UITapGestureRecognizers的问题

时间:2011-12-12 22:10:39

标签: objective-c ios interface-builder uigesturerecognizer iboutlet

我正在尝试使用可在Interface Builder中找到的UITapGestureRecognizer对象。我将一个“UITapGestureRecognizer”从对象库拖到单个视图xib。然后我从这个轻敲手势创建一个IBAction方法,进行一个简单的测试,一旦点击视图,我只是打印一个“NSLog”消息到控制台。我已经运行了这个,并且没有调用tap方法。我右键单击IB中的视图,我注意到有一个警告“!”在视图的“Outlook集合”中我看到:

Outlook Collections
gestureRecognizers - Tap Gesture Recognizer (!)

警告说明:UIView does not have an outlet collection named gestureRecognizers.

我需要做些什么才能解决这个问题?

7 个答案:

答案 0 :(得分:4)

我认为您尚未将UITapGestureRecognizer正确连接到您的代码。

当您在xib UITapGestureRecognizer上放置Xcode时,会自动进行必要的参考插座连接。

您只需在代码中创建IBAction方法,然后将其连接到ITapGestureRecognizer中放置的U xib的选择器。

我已附上截图供您参考。

enter image description here

enter image description here

希望这会有所帮助!!

答案 1 :(得分:4)

Mr.Anonymous解决方案是正确的。 无需在视图控制器中实现委托或设置它。 但是,您应该检查是否已选中启用了用户交互(在右侧的属性窗口中),尤其是在将识别器附加到标签时。

答案 2 :(得分:2)

我忘了检查是否必须检查添加了手势识别器的视图已启用用户交互

答案 3 :(得分:1)

要检查的两件事:您的视图控制器(包含UIView的视图控制器)是否实现了UIGestureRecognizerDelegate协议?

一旦实现了UIGestureRecognizerDelegate,请确保将手势识别器的委托属性设置为视图控制器。我使用故事板进行连接。

我这样做并且没有任何错误(IOS 5.1,xCode 4.3)。

答案 4 :(得分:1)

我这样做是为了在我的导航栏中添加一个Double Tap Gesture,完全使用代码,发现它非常易于使用....

在视图中加载了......

//Add double tap gesture to Navbar
UITapGestureRecognizer* tapRecon = [[UITapGestureRecognizer alloc]
                                    initWithTarget:self action:@selector(navigationBarDoubleTap:)];
tapRecon.numberOfTapsRequired = 2;
[self.navigationController.navigationBar addGestureRecognizer:tapRecon];

然后我有一个方法......

#pragma mark - Auto Refresh Method
- (void)navigationBarDoubleTap:(UIGestureRecognizer*)recognizer {
      //Do Stuff Here
}

也许你可以适应这一点。

血浆

答案 5 :(得分:0)

看看this

具体是插座设置的屏幕截图。希望这会有所帮助。

答案 6 :(得分:0)

警告应该不是问题。它只是因为您可以添加多个手势识别器作为IBOutlet集合,但这不是必需的。

打开你的方案中的僵尸,以便在调试时获得更好的错误消息。在我的情况下,我试图用我的手势处理程序发送消息的View控制器没有在Interface Builder中实例化。

此外,没有必要实现委托协议,它将适用于任何UIView。