swift 在可扩展视图单元格中调用时,UIButton函数将不响应

afdcj2ne  于 12个月前  发布在  Swift
关注(0)|答案(2)|浏览(87)

我有一个UITableView,我还定义了它的一个子类,以便在每个单元格中包含一个按钮。
为了检查它的功能是否正常工作,我定义了一个@objc函数(因为我是以编程方式完成的)。
我可以看到表格单元格存在,并且按钮在其中可见,因为我已经在我的UIViewController类的viewDidLoad函数中注册了它,但是当我单击它时,它没有响应。

@objc func actbuttonFuncCall(_ sender: UIButton) {
        print("button clicked")
    }

字符串
这就是我如何为cellForRowAt部分定义tableView函数:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
           let cell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell", for: indexPath) as! MyCustomCell

           if let model = viewsArray[indexPath.row] {
               // name  assinged from another VC
                   cell.textLabel?.text = model.name
               cell.textLabel?.textColor = .systemPink
               
               cell.button.isUserInteractionEnabled = true
               cell.isUserInteractionEnabled = true
               cell.button.addTarget(self, action: #selector(actbuttonFuncCall), for: .touchUpInside)

               }
         
           return cell
       }


这是我的UIButton的子类

class MyCustomCell: UITableViewCell {
    let button = UIButton()
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        button.setTitle("Get to it", for: .normal)
                button.backgroundColor = .blue
        addSubview(button)
        
        button.translatesAutoresizingMaskIntoConstraints = false
               NSLayoutConstraint.activate([
                   button.centerYAnchor.constraint(equalTo: centerYAnchor),
                   button.centerXAnchor.constraint(equalTo: centerXAnchor),
                   button.widthAnchor.constraint(equalToConstant: 100), // Adjust as needed
                   button.heightAnchor.constraint(equalToConstant: 40)  // Adjust as needed
               ])
      
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}


我有任何其他的行动,我应该执行,使我的按钮功能的工作?

laawzig2

laawzig21#

正如@HangaRash在他们的评论中所说,你应该在单元格的contentView中添加按钮,它将是:

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
    ...
    //addSubview(button)
    contentView.addSubview(button)
}

字符串
这与视图层次结构不同:

  1. addSubview(按钮)
UITableView
     |---MyCustomCell
             |--- UIButton (Get to it)
             |--- UITableViewCellContentView

//The button is below UITableViewCellContentView so the cell 
//will receive touch event from `didSelectRowAt` delegate.

  1. contentView.addSubview(按钮)
UITableView
     |---MyCustomCell
             |--- UITableViewCellContentView
                              |--- UIButton (Get to it)

//The button is above UITableViewCellContentView so the cell 
//will receive touch event from UIButton's first if within its frame.
//And receives `didSelectRowAt` delegate if out of button frame.

yjghlzjz

yjghlzjz2#

可以通过协议和委托方法实现。
**点击此链接查看详细答案=>**如何查看点击图片和标题

相关问题