在 Interface Builder 中使用 UITapGestureRecognizers 的问题
Posted
技术标签:
【中文标题】在 Interface Builder 中使用 UITapGestureRecognizers 的问题【英文标题】:Issues using UITapGestureRecognizers in Interface Builder 【发布时间】:2011-12-12 22:10:39 【问题描述】:我正在尝试使用可以在 Interface Builder 中找到的 UITapGestureRecognizer 对象。我已经将一个“UITapGestureRecognizer”从对象库拖到一个单一的视图 xib 中。然后我从这个点击手势创建一个 IBAction 方法,对于一个简单的测试,我只是在视图上点击一个“NSLog”消息到控制台。我已经运行了它,并且没有调用 tap 方法。我右键单击 IB 中的视图,我注意到有一个警告“!”在视图的“Outlet Collections”上,我看到了:
Outlet Collections
gestureRecognizers - Tap Gesture Recognizer (!)
警告状态:UIView does not have an outlet collection named gestureRecognizers.
我需要做什么来解决这个问题?
【问题讨论】:
我做了同样的练习,它对我有用。我将 xCode 4.2 与 ios SDK5 一起使用。警告消息在那里,但它仍然打印 NSLog 消息。 知道警告是什么或如何补救? 我遇到了同样的问题,虽然当我双击我的视图时它似乎做了一些事情......它崩溃了。 它们是“Outlet Collections”,而不是“Outlook Collections”;) 【参考方案1】:Mr.Anonymous 的解决方案是正确的。 无需在视图控制器中实现委托或设置它。 但是,您应该检查是否已启用用户交互(在右侧的属性窗口中),尤其是当您将识别器附加到标签时。
【讨论】:
【参考方案2】:我认为您没有将UITapGestureRecognizer
正确连接到您的代码。
当您在 xib 上放置 UITapGestureRecognizer
时,Xcode
会自动进行必要的引用出口连接。
您只需要在您的代码中创建一个IBAction
方法,然后将其连接到放在xib
中的UITapGestureRecognizer
的选择器。
我附上了截图供你参考。
希望这会有所帮助!
【讨论】:
【参考方案3】:我忘记检查添加手势识别器的视图是否必须检查已启用用户交互。
【讨论】:
【参考方案4】:要检查两件事:您的视图控制器(包含 UIView 的那个)是否实现了 UIGestureRecognizerDelegate 协议?
一旦它实现了 UIGestureRecognizerDelegate,请确保您已将手势识别器的委托属性设置为视图控制器。我使用故事板来建立联系。
我这样做了,我没有收到任何错误(IOS 5.1,xCode 4.3)。
【讨论】:
【参考方案5】:我这样做是为了在导航栏中添加双击手势,完全在代码中,发现它非常易于使用....
在视图中确实加载了...
//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
也许你可以适应这个。
等离子
【讨论】:
【参考方案6】:看看this。
特别是插座设置的屏幕截图。希望这会有所帮助。
【讨论】:
【参考方案7】:警告应该不是问题。它只是在那里,因为您可以将多个手势识别器添加为 IBOutlet 集合,但这不是必需的。
在您的方案中打开僵尸,以便在调试时获得更好的错误消息。在我的情况下,我试图通过手势处理程序发送消息的视图控制器没有在 Interface Builder 中实例化。
另外,不需要实现委托协议,它可以在任何 UIView 上工作。
【讨论】:
以上是关于在 Interface Builder 中使用 UITapGestureRecognizers 的问题的主要内容,如果未能解决你的问题,请参考以下文章
在 Interface Builder 中使用大小类更改字体大小
如何在 Xcode 6 Interface Builder 中使用模板渲染模式?
在 Swift 中使用 IBOutlet 的 UIImageView 在 Interface Builder 中查看