swift 在tableview单元格中设置一个按钮打印内容

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

在我下面的Swift代码中,它在一个tableview单元格中有一个按钮。问题是当我点击按钮时,没有任何东西被打印出来。我不知道下一步该怎么做,按钮被连接了,应该可以工作。我的代码不使用故事板,它的所有代码。所以没有故事板连接问题

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    let tableView = UITableView()
    let names = ["Katy Perry", "Jessica Biel", "Taylor Swift"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.frame = view.bounds
        tableView.delegate = self
        tableView.dataSource = self
        tableView.register(CustomTableViewCell.self, forCellReuseIdentifier: "Cell")
        view.addSubview(tableView)
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return names.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomTableViewCell
        
        let name = names[indexPath.row]
        cell.textLabel?.text = name
        cell.button.tag = indexPath.row // Set tag to identify which button is tapped
        cell.button.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)
        
        return cell
    }
    
    @objc func buttonTapped(_ sender: UIButton) {
        let index = sender.tag
        let selectedName = names[index]
        print("Button tapped in cell for \(selectedName)")
    }
}

class CustomTableViewCell: UITableViewCell {
    let button = UIButton(type: .system)
    
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        
        button.setTitle("Tap", for: .normal)
        button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        
        addSubview(button)
        button.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            button.centerYAnchor.constraint(equalTo: centerYAnchor),
            button.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16)
        ])
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    @objc func buttonAction() {
        print("Button in cell tapped")
    }
}

字符串

uurity8g

uurity8g1#

在单元格的init(style: UITableViewCell.CellStyle, reuseIdentifier: String?)或表视图的func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell中,将单元格的contentView上的isUserInteractionEnabled设置为false

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        ...
        cell.contentView.isUserInteractionEnabled = false
        ...
    }
}

字符串

class CustomTableViewCell: UITableViewCell {
    
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        ...
        contentView.isUserInteractionEnabled = false
        ...
    }
}


输出量:
点击单元格中的按钮
在单元格中点击凯蒂佩里的按钮

mtb9vblg

mtb9vblg2#

class CustomTableViewCell:CustomableViewCell {

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
    ...
    contentView.isUserInteractionEnabled = false
    ...
}

字符串
这是一个好方法。

相关问题