如何使用在UICollection补充视图一个UIButton?(How can I use a U

2019-07-04 03:24发布

我试图把一个UIButton在UICollectionView补充视图(页脚)。 我已经用故事板UICollectionViewCell的子类连接的UIButton,并可以改变它的属性包括程序的背景图像。 然而,当我线了触摸上抬里面的按钮的方法的情况下,它不火。 事实上,按钮甚至没有出现在视觉上被响应用户的触摸。 在排除故障时,我尝试添加一个UIButton到集合视图的头,看到相同的行为。 添加按钮无关视图按下时产生的相互作用效应。

是不是有什么特别的,我需要做来实现在UICollection补充视图一个UIButton?

Answer 1:

甲补充视图应该是一个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 )返回YESisUserInteractionEnabled 。 窗口的上海华为零。



Answer 2:

我有一个自定义按钮,它的子类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就火了,当按下控制在视觉上就会凸显。



文章来源: How can I use a UIButton in a UICollection supplementary view?