单击CollectionViewCell中的A按钮

时间:2017-07-15 03:09:50

标签: ios swift uibutton uicollectionviewcell

我在集合视图单元的自定义类中添加了一个按钮,但无法点击它。

以下是我在单元格自定义类中声明按钮的方法:

let shareBtn: UIButton = {
    let roundBtn = UIButton()
    roundBtn.frame = CGRect(x: 0, y: 0, width: 70, height: 70)
    roundBtn.layer.cornerRadius = 35
    roundBtn.layer.shadowOpacity = 0.25
    roundBtn.layer.shadowRadius = 2
    roundBtn.setImage(UIImage(named: "share"), for: .normal)
    roundBtn.addTarget(self, action: #selector(shareAction(button:)), for: .touchUpInside)
    roundBtn.isUserInteractionEnabled = true
    roundBtn.isEnabled = true

    return roundBtn
}()

以下是选择器调用的方法:

func shareAction(button: UIButton){
    print("shareAction")
}

这里我如何在init

中添加按钮
override init(frame: CGRect) {
    super.init(frame: frame)

    contentView.addSubview(shareBtn)

    shareBtn.translatesAutoresizingMaskIntoConstraints = false
    shareBtn.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -100).isActive = true
    shareBtn.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true
    shareBtn.widthAnchor.constraint(equalToConstant: 70).isActive = true
    shareBtn.heightAnchor.constraint(equalToConstant: 70).isActive = true

我尝试将按钮添加到两者 - contentView和self,但两者都给出相同的结果,即无法点击按钮。

欢迎任何建议。

2 个答案:

答案 0 :(得分:2)

按照您在访问shareBtn时创建按钮的方式,您总是创建一个新实例,因为它是一个计算变量。这就是你写这篇文章的原因:

addSubview(shareBtn)
 shareBtn.addTarget(self, action: #selector(shareAction(button:)), for: .touchUpInside)

您添加为子视图的按钮和添加目标的按钮是不同的实例。您必须使用lazy var shareBtn,如下所示:

lazy var shareBtn: UIButton = {
    let roundBtn = UIButton()
    roundBtn.frame = CGRect(x: 0, y: 0, width: 70, height: 70)
    roundBtn.layer.cornerRadius = 35
    roundBtn.layer.shadowOpacity = 0.25
    roundBtn.layer.shadowRadius = 2
    roundBtn.setImage(UIImage(named: "share"), for: .normal)
    roundBtn.addTarget(self, action: #selector(shareAction(button:)), for: .touchUpInside)
    roundBtn.isUserInteractionEnabled = true
    roundBtn.isEnabled = true

    return roundBtn
}()

这样,当您第一次访问它时,只会创建一个实例并将其分配给shareBtn,所有后续访问都将使用相同的实例。

答案 1 :(得分:0)

该按钮位于父视图控制器中添加的页面控制视图下。我还需要在将子视图添加到单元格后调用action方法:

 addSubview(shareBtn)
 shareBtn.addTarget(self, action: #selector(shareAction(button:)), for: .touchUpInside)