在不使用 IBOutlet 的 xib 中获取手势识别器的参考

Posted

技术标签:

【中文标题】在不使用 IBOutlet 的 xib 中获取手势识别器的参考【英文标题】:Get reference of gesture recognizer in xib not using IBOutlet 【发布时间】:2017-06-30 06:22:07 【问题描述】:

我在xib文件中创建了单击和双击手势识别器,我想在一个类别中访问它,但是属性中的xib的Referring Outlet并且它不能插入到一个类别中,我可以使用代码来访问函数viewDidLoad中的手势识别器引用?

【问题讨论】:

【参考方案1】:

是的,你可以。视图会保留其手势识别器的列表,因此您只需遍历它们即可。

for (UIGestureRecognizer *recognizer in self.gestureRecognizers)

    // You need a way to identify it here

在这种情况下,如果您的类别正在扩展视图控制器,您只需要知道哪个视图包含您想要的手势识别器。

@property(nonatomic, copy) NSArray<__kindof UIGestureRecognizer *> *gestureRecognizers;

https://developer.apple.com/documentation/uikit/uiview/1622542-gesturerecognizers?language=objc

编辑:

如果您的类别正在扩展 ViewController,请将循环更改为 self.view.gestureRecognizers(或您附加到的任何其他视图)

【讨论】:

self.gestureRecognizers 这个gestureRecognizers是什么?如果我需要找到单击手势,找到它的关键是什么? 它是所有 UIView 都有的属性。您必须根据您设置的其他识别器来识别它。您可以检查其每个属性,直到找到符合您条件的属性。 (点击次数、类型等) 我找到了gestureRecognizers 谢谢,我还是想知道如果我想检测识别器是否是一个tapGesture 应该使用哪个函数?我的意思是如何检测它的类型?能展示一下功能吗? ***.com/questions/27475250/… 'for (UIGestureRecognizer * [self.pdfCustomView gestureRecognizers] 中的识别器) if([recognizer isKindOfClass:[UITapGestureRecognizer class]]) if(recognizer.numberOfTapsRequired ==1) ' 我这样写这但是在类型“UIGestureRecognizer”上找不到 Property numberOfTapsRequired 的错误,你知道如何解决这个问题吗?

以上是关于在不使用 IBOutlet 的 xib 中获取手势识别器的参考的主要内容,如果未能解决你的问题,请参考以下文章

为啥我必须在自定义 NIB / XIB 中连接 IBOutlet 两次?

如何从 XIB 文件访问 ViewController 中的 IBoutlet

Swift - 带有 xib 文件的自定义视图,IBOutlet 为 nil

XIB VC IBOutlet 的错误“不符合编码要求”

无法在 Interface Builder 中连接 IBOutlet

重用带有通过 IBOutlet 连接到超类的 uitableview 的 xib:如何更好地为某些子类添加带有按钮的工具栏?