11

我正在尝试使用可以在Interface Builder中找到的UITapGestureRecognizer对象。我把一个单独的“UITapGestureRecognizer”从对象库拖到单个视图xib中。然后我从这个轻敲手势创建一个IBAction方法,对于一个简单的测试,只要在视图上点击一下,我就会向控制台打印一条“NSLog”消息。我已经运行了这个,tap方法没有被调用。我右键点击IB中的视图,我发现有一个警告“!”在视图上的“瞭望收藏”我看到:Interface Builder中使用UITapGestureRecognizers的问题

Outlook Collections 
gestureRecognizers - Tap Gesture Recognizer (!) 

警告状态:UIView does not have an outlet collection named gestureRecognizers.

什么我需要做补救?

+0

我通过相同的练习,它适用于我。我在iOS SDK5中使用xCode 4.2。警告消息在那里,但它仍然打印NSLog消息。 –

+0

有什么想法警告或如何解决? – 5StringRyan

+1

我怀疑gestureRecognizers没有被定义为IBOutlet,但是当我们在IB中放置gestureRecognizer控件时它会知道如何为我们配置它。 –

回答

0

看看this

特别是插座设置的屏幕快照。希望这会有所帮助。

1

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

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

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

1

我这样做是为了一个双敲击手势添加到我的导航栏,完全代码,并发现它非常容易使用....

鉴于没有负载...

//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 
} 

也许你可以适应这一点。

等离子

0

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

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

另外,没有必要实现委托协议,它可以在任何UIView上工作。

4

我认为你没有将UITapGestureRecognizer正确连接到你的代码。

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

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

我附上了截图供你参考。

enter image description here

enter image description here

希望这有助于!

4

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

2

我忘记检查启用用户交互必须检查手势识别器添加的视图。