Interface Builder中使用UITapGestureRecognizers的问题
我正在尝试使用可以在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.
什么我需要做补救?
有两件事要检查:你的视图控制器(包含UIView的)是否实现了UIGestureRecognizerDelegate协议?
一旦它实现了UIGestureRecognizerDelegate,请确保已将手势识别器的委托属性设置为视图控制器。我用故事板来建立连接。
我这样做,我没有得到任何错误(IOS 5.1,xCode 4.3)。
我这样做是为了一个双敲击手势添加到我的导航栏,完全代码,并发现它非常容易使用....
鉴于没有负载...
//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
}
也许你可以适应这一点。
等离子
该警告不应该是一个问题。它只是在那里,因为您可以将多个手势识别器添加为IBOutlet集合,但这不是必需的。
在您的方案中打开僵尸,以便在调试时获得更好的错误消息。在我的情况下,我试图用我的手势处理程序发送消息的视图控制器没有在Interface Builder中实例化。
另外,没有必要实现委托协议,它可以在任何UIView上工作。
我认为你没有将UITapGestureRecognizer
正确连接到你的代码。
当您在xib上放置UITapGestureRecognizer
时,会自动进行必要的参考插座连接。
您只需要在代码中创建IBAction
方法,然后将其连接到位于xib
中的U ITapGestureRecognizer
的选择器。
我附上了截图供你参考。
希望这有助于!
Mr.Anonymous解决方案是正确的。 无需在视图控制器中实现委托或设置它。 但是,您应该检查是否已选中启用的用户交互(在右侧的属性窗口中),尤其是在将识别器附加到标签时。
我忘记检查启用用户交互必须检查手势识别器添加的视图。
我通过相同的练习,它适用于我。我在iOS SDK5中使用xCode 4.2。警告消息在那里,但它仍然打印NSLog消息。 –
有什么想法警告或如何解决? – 5StringRyan
我怀疑gestureRecognizers没有被定义为IBOutlet,但是当我们在IB中放置gestureRecognizer控件时它会知道如何为我们配置它。 –