iOS Button 在自定义视图中不起作用

Posted

技术标签:

【中文标题】iOS Button 在自定义视图中不起作用【英文标题】:iOS Button not work in custom view 【发布时间】:2017-03-22 03:51:19 【问题描述】:

有两个自定义视图 - viewA 和 viewB。ViewB 是在 viewA 中添加的一个小视图。起初 viewA 充满了整个屏幕。 ViewB 位于 viewA 的底部(屏幕外)。当点击 viewA 中的按钮时,viewB 的约束底部常量将为 -100,因此 viewB 将显示在屏幕底部。但是viewB中有一个按钮没有响应它的选择器。这是我的代码:

在视图A中

let viewB: ViewB = 
    let view = ViewB(
    view.setup()
    return view
()

viewB 约束:

    viewB.snp.makeConstraints  (make) in
        make.trailing.leading.equalTo(self)
        make.height.equalTo(100)
        make.top.equalTo(self.snp.bottom)
    

当点击按钮引起视图B

            UIView.animate(withDuration: 0.5) 
            self.snp.updateConstraints( (make) in
                make.bottom.equalTo(-100)
            )
        
        self.layoutIfNeeded()

在视图B中:

class ViewB: UIView 

let b: UIButton = 
    let button = UIButton(type: UIButtonType.custom)
    button.addTarget(self, action: #selector(btnClicked), for: UIControlEvents.touchUpInside)
    button.backgroundColor = UIColor.green
    button.setTitle("Button", for: .normal)
    return button
()


func btnClicked() 
   print("btnClicked")


func setup() 
    addSubview(b)
    b.snp.makeConstraints  (make) in
        make.leading.top.bottom.equalTo(self)
        make.width.equalTo(100)
    



【问题讨论】:

你设置的按钮框架的代码在哪里? button.frame = CGRect(button_x_position,Button_y_position,your_button_width , your_button_hight) 在 let button = UIButton(type: UIButtonType.custom) 之后添加这一行并检查输出 按钮是否可见?如果是,请检查调试视图层次结构中是否有另一个视图与您的 UIButton 重叠。 【参考方案1】:

您的代码本身可以正常工作。因此,问题可能类似于按钮被另一个执行触摸操作的视图覆盖。您可以使用视图调试器对此进行测试,或者提供指向您的项目的链接,以便我们中的一个人可以看看发生了什么。

【讨论】:

好的,如果您无法找出问题所在,那么我建议发布一个指向完整项目的链接(不仅仅是代码 sn-ps),以便我(或其他人)可以运行项目并告诉你出了什么问题。 感谢您,我发现 viewB 超出了边界。 很高兴听到您能够自己解决问题 :) 这些总是最好的情况 - 至少对我而言。【参考方案2】:

我认为,您的视图正在超出其超级视图或任何其他视图正在其上层出现。请看这个

superview.clipsToBounds :  YES

【讨论】:

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

图像的滚动视图在自定义表格视图单元格中不起作用

UITapGestureRecognizer 在自定义 UIView 中不起作用

安全区域在自定义 TabBarController 的 ViewController 中不起作用

在自定义视图中连接到 UIButton 的 AddTarget 不起作用。 (斯威夫特 5,iOS)

getView() 在我的自定义列表视图中不起作用

UIScreenEdgePanGestureRecognizer 在自定义键盘扩展中不起作用