Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在Interface Builder中使用UITapgestureRecognitors的问题_Objective C_Ios_Interface Builder_Uigesturerecognizer_Iboutlet - Fatal编程技术网

Objective c 在Interface Builder中使用UITapgestureRecognitors的问题

Objective c 在Interface Builder中使用UITapgestureRecognitors的问题,objective-c,ios,interface-builder,uigesturerecognizer,iboutlet,Objective C,Ios,Interface Builder,Uigesturerecognizer,Iboutlet,我正在尝试使用可以在Interface Builder中找到的UITapGestureRecognitor对象。我已将单个“UITapgestureRecognitor”从对象库拖到单个视图xib。然后,我从这个点击手势创建了一个iAction方法,为了进行简单的测试,只要点击视图,我就会向控制台打印一条“NSLog”消息。我已经运行了这个,没有调用tap方法。我右键单击IB中的视图,发现视图的“Outlet Collections”上有一个警告“!”: 警告状态:UIView没有名为gestu

我正在尝试使用可以在Interface Builder中找到的UITapGestureRecognitor对象。我已将单个“UITapgestureRecognitor”从对象库拖到单个视图xib。然后,我从这个点击手势创建了一个iAction方法,为了进行简单的测试,只要点击视图,我就会向控制台打印一条“NSLog”消息。我已经运行了这个,没有调用tap方法。我右键单击IB中的视图,发现视图的“Outlet Collections”上有一个警告“!”:

警告状态:
UIView没有名为gestureRecognizers的outlet集合。

我需要做些什么来解决这个问题?

看看


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

需要检查两件事:您的视图控制器(包含UIView的控制器)是否实现UIGestureRecognitzerDelegate协议

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


我这样做,并且没有收到任何错误(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上工作。

我认为您没有将
UIAPTgestureRecognitizer
正确连接到您的代码

当您将
uitappesturerecognizer
放到xib
Xcode
上时,会自动进行必要的引用插座连接

您只需在代码中创建一个
iAction
方法,然后将其连接到放置在
xib
中的U
ITAPgestureRecognitizer
的选择器

我附上了截图供您参考。


希望这有帮助

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

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

我进行了相同的练习,它对我有效。我将xCode 4.2与iOS SDK5一起使用。警告消息在那里,但它仍然打印NSLog消息。你知道警告的目的是什么,或者如何补救吗?我怀疑gestureRecognizers并不是定义为IBOutlet,而是当我们在IB中删除gestureRecognizer控件时,它知道如何为我们连接它。我遇到了同样的问题,尽管它看起来是这样的当我双击我的视图时。。。它崩溃了。它们是“Outlet集合”,而不是“Outlook集合”;)
#pragma mark - Auto Refresh Method
- (void)navigationBarDoubleTap:(UIGestureRecognizer*)recognizer {
      //Do Stuff Here
}