我试图把一个UIButton在UICollectionView补充视图(页脚)。 我已经用故事板UICollectionViewCell的子类连接的UIButton,并可以改变它的属性包括程序的背景图像。 然而,当我线了触摸上抬里面的按钮的方法的情况下,它不火。 事实上,按钮甚至没有出现在视觉上被响应用户的触摸。 在排除故障时,我尝试添加一个UIButton到集合视图的头,看到相同的行为。 添加按钮无关视图按下时产生的相互作用效应。
是不是有什么特别的,我需要做来实现在UICollection补充视图一个UIButton?
甲补充视图应该是一个UICollectionReusableView
(或其亚类),而不是一个UICollectionViewCell
。
无论如何,如果按钮的没有响应,要做的第一件事是检查其所有祖先观点已经userInteractionEnabled
设置为YES
。 暂停在调试器,一旦按钮在屏幕上,并做到这一点:
(lldb) po [[UIApp keyWindow] recursiveDescription]
在列表中找到该按钮并复制其地址。 然后,你可以检查它和每个上海华。 例:
(lldb) p (BOOL)[0xa2e4800 isUserInteractionEnabled]
(BOOL) $4 = YES
(lldb) p (BOOL)[[0xa2e4800 superview] isUserInteractionEnabled]
(BOOL) $5 = YES
(lldb) p (BOOL)[[[0xa2e4800 superview] superview] isUserInteractionEnabled]
(BOOL) $6 = YES
(lldb) p (BOOL)[[[[0xa2e4800 superview] superview] superview] isUserInteractionEnabled]
(BOOL) $8 = YES
(lldb) p (BOOL)[[[[[0xa2e4800 superview] superview] superview] superview] isUserInteractionEnabled]
(BOOL) $9 = YES
(lldb) p (BOOL)[[[[[[0xa2e4800 superview] superview] superview] superview] superview] isUserInteractionEnabled]
(BOOL) $10 = NO
(lldb) po [[[[[0xa2e4800 superview] superview] superview] superview] superview]
(id) $11 = 0x00000000 <nil>
在这里,我发现到根的所有视图(在UIWindow
)返回YES
从isUserInteractionEnabled
。 窗口的上海华为零。
我有一个自定义按钮,它的子类UIControl
并把它放在里面UICollectionReusableView
。 为了使它工作,我做了控件及其子视图子视图的每一个子视图处理没有用户交互。
func disableUserInteractionInView(view: UIView) {
view.userInteractionEnabled = false
for view in view.subviews {
self.disableUserInteractionInView(view)
}
}
// My control has a subview called contentView which serves as a container
// of all my custom button's subviews.
self.disableUserInteractionInView(self.contentView)
由于添加的代码,所有的事件侦听器.TouchUpInside
就火了,当按下控制在视觉上就会凸显。