[我正在制作一个扩展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进行工作,而我正在以编程方式完成所有工作。
可能是表格视图单元格认为它已被选中并且正在取消按钮的触摸。
尝试一下:
tableView.allowsSelection = false
如果不是这种情况,请尝试检查按钮的框架以查看是否确实在点击它。您可以use the Debug View Hierarchy button进行检查。
此外,您可以尝试:
button.clipSubviews = true
如果看不到按钮,则说明框架有误,也无法点击按钮框架之外。 (即使您可以看到它。)