【问题标题】:Issues using UITapGestureRecognizers in Interface Builder在 Interface Builder 中使用 UITapGestureRecognizers 的问题
【发布时间】: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”;)

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


【解决方案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 上工作。

              【讨论】:

                猜你喜欢
                • 2017-02-06
                • 2015-02-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-02-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多