在 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 中使用常量

在 Interface Builder 中使用大小类更改字体大小

如何在 Xcode 6 Interface Builder 中使用模板渲染模式?

在 Swift 中使用 IBOutlet 的 UIImageView 在 Interface Builder 中查看

在 Interface Builder 中使用 Suite 将值绑定到 NSUserDefaults

iOS:在 Interface Builder 中使用动态 contentSize 创建 UIScrollView