自定义视图中未调用 UIButton 操作

Posted

技术标签:

【中文标题】自定义视图中未调用 UIButton 操作【英文标题】:UIButton action not called inside custom view 【发布时间】:2015-08-26 17:02:01 【问题描述】:

我想制作一个自定义视图,其中包含以下内容:

绿色景观 在绿色视图中的图像视图 在这另一个白色视图之上 白色视图之上的另一个图像视图 还有一个 UIButton

这是我在自定义视图中的代码:

func setup() 

    // add green view
    let greenView = UIView(frame: CGRectMake(0, 0, frame.size.width, frame.size.height))
    greenView.backgroundColor = UIColor.greenColor()
    greenView.userInteractionEnabled = true
    addSubview(greenView)

    // add first image
    let image1 = UIImageView(frame: CGRectMake(0, 0, frame.size.width, frame.size.height))
    image1.image = UIImage(named: "checked2")
    image1.userInteractionEnabled = true
    greenView.addSubview(image1)

    // add white image
    let whiteView = UIView(frame: CGRectMake(0, 0, frame.size.width, frame.size.height))
    whiteView.backgroundColor = UIColor.yellowColor()
    whiteView.userInteractionEnabled = true
    greenView.addSubview(whiteView)

    // add second image
    let image2 = UIImageView(frame: CGRectMake(0, 0, frame.size.width, frame.size.height))
    image2.image = UIImage(named: "checked")
    image2.userInteractionEnabled = true
    whiteView.addSubview(image2)

    // add button
    let button = UIButton(frame: CGRectMake(0, 0, frame.size.width, frame.size.height))
    button.backgroundColor = UIColor.redColor()
    button.addTarget(self, action: Selector("animation:"), forControlEvents: UIControlEvents.TouchUpInside)
    button.userInteractionEnabled = true
    addSubview(button)





func animation(button: UIButton) 
    print("tapped")

红色的按钮显示在顶部,但单击它时不会调用该操作。 我尝试在所有元素上设置userInteractionEnabled,但没有任何效果。

【问题讨论】:

确保为该自定义视图启用了用户交互。 在控制台中,您是否看到类似以下内容的错误:找不到选择器? 我没有收到任何消息。自定义视图的 userInteractionEnabled 设置为 true 似乎自动布局是问题所在。清除自定义视图容器的约束后,它现在可以工作了。 【参考方案1】:

您发布的代码运行良好,问题在于包含您所有视图的容器视图,可能userInteractionEnabled 对于容器视图是错误的。

【讨论】:

自定义视图容器还将 userInteractionEnabled 设置为 true 好的,现在好像可以了。我清除了自定义视图容器的约束,现在它可以工作了。所以自动布局是个问题。【参考方案2】:

按钮用户交互默认开启,无需显式设置。

【讨论】:

不需要在类中声明,视图也有引用(添加为子视图后)所以它不会被释放 addSubview 将添加视图并持有对它们的强引用并且不会被释放 那么简单地按钮交互被阻止任何其他视图。

以上是关于自定义视图中未调用 UIButton 操作的主要内容,如果未能解决你的问题,请参考以下文章

向自定义视图中的 UIButton 添加操作

自定义 UIView:未调用 UIButton addTarget

在具有许多其他视图的自定义 UITableViewCell 中为 UIButton 设置操作

有没有办法在自定义 UIButton 中调用 TouchUpInside 操作?

当视图包含带有自定义图像的 UIButton 时,UIViewController encodeWithCoder 失败

如何使自定义 UIButton 变暗