作为UIView子视图的程序化UIButton没有响应

问题描述 投票:0回答:1

[我正在制作一个扩展UITableViewCell的类-它将显示社交媒体新闻提要,每个单元格都是某人的帖子。

我已经将UIButton添加为UIView的子视图,因此UIView将同时包含按钮和标签作为子视图like this。 (对不起,图像有点小,但我想您会明白的。)

但是,UIButton不能响应点击,甚至不能突出显示。其超级视图本身具有许多超级视图,包括所有堆栈,但是我检查了一下,每个超级视图的isUserInteractionEnabled为true。

    let button = UIButton(type: .system)
    button.translatesAutoresizingMaskIntoConstraints = false
    button(UIImage(named: "vertical_dots")?.withRenderingMode(.alwaysOriginal), for: .normal)
    button.backgroundColor = .white
    button.imageView?.contentMode = .scaleAspectFit
    button.addTarget(self, action: #selector(myButtonAction), for: .touchUpInside)

    label.text = "\(userPost?.minutesAgo)m"
    label.font = label.font.withSize(11.0)
    label.textColor = .lightGray
    label.translatesAutoresizingMaskIntoConstraints = false
    label.numberOfLines = 1

    let superview = UIView()
    superview.translatesAutoresizingMaskIntoConstraints = false
    superview.addSubview(button)
    superview.addSubview(label)

    label.leftAnchor.constraint(equalTo: superview.leftAnchor).isActive = true
    label.heightAnchor.constraint(equalToConstant: 40).isActive = true
    label.centerYAnchor.constraint(equalTo: superview.centerYAnchor).isActive = true
    button.leftAnchor.constraint(equalTo: label.rightAnchor).isActive = true
    button.centerYAnchor.constraint(equalTo: superview.centerYAnchor).isActive = true
    button.heightAnchor.constraint(equalToConstant: 20).isActive = true
    button.widthAnchor.constraint(equalToConstant: 15).isActive = true

我收到很多约束警告,但我认为这不会影响事情?

请注意,这只是我的代码的一小部分,我将超级视图添加到其他视图中,但是这里没有显示所有内容。我的视图都没有框架,只有约束,而且都正确显示。

我认为以前没有问过这个问题,因为其他人正在使用Interface Builder进行工作,而我正在以编程方式完成所有工作。

ios swift uibutton subview
1个回答
0
投票

可能是表格视图单元格认为它已被选中并且正在取消按钮的触摸。

尝试一下:

tableView.allowsSelection = false

如果不是这种情况,请尝试检查按钮的框架以查看是否确实在点击它。您可以use the Debug View Hierarchy button进行检查。

此外,您可以尝试:

button.clipSubviews = true

如果看不到按钮,则说明框架有误,也无法点击按钮框架之外。 (即使您可以看到它。)

© www.soinside.com 2019 - 2024. All rights reserved.