ios - 如何在自定义单元格中添加按钮?

标签 ios swift uitableview

我正在从 XIB 文件制作自定义单元格并在我的 tableView 中实现, 我能够从自定义单元格中实现文本,但如何为按钮实现相同的文本并接收对它的触摸?

这是我写的代码:

struct cellData {

let cell : Int!
let text : String!
let button =  UIButton()
}

var arrayOfData = [cellData]()

override func viewDidLoad() {
    super.viewDidLoad()

arrayOfData = [cellData(cell : 1, text: "ahfhasdf", button: button)]
 }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if arrayOfData[indexPath.row].cell==1{

        let cell=Bundle.main.loadNibNamed("CustomTableViewCell1", owner: self, options: nil)?.first as! CustomTableViewCell1

        cell.label1.text=arrayOfData[indexPath.row].text
        cell.pillImage.currentImage=arrayOfData[indexPath].pillImage

        return cell
}

我的 pillCustomTableViewCell1 中的按钮,我想在我的单元格中使用它,以及如何在按下按钮时执行操作?请帮忙。

最佳答案

这与您在问题中提出的问题相去甚远,但我相信您正在寻找这样的东西。我希望代码和注释不言自明。

// My cell from xib (storyboard)
class MyTableViewCell: UITableViewCell {

    @IBOutlet weak var button: UIButton!
    @IBOutlet weak var cellImageView: UIImageView!
    @IBOutlet weak var label: UILabel!

}

// My view controlle from xib (storyboard)
class MyViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    fileprivate var dataSource: [CellData] = [CellData]()

    override func viewDidLoad() {
        super.viewDidLoad()

        dataSource = [CellData(index: 0, title: "First cell", image: nil, target: self, selector: #selector(firstCellPressed)),
                      CellData(index: 1, title: "Another cell", image: nil, target: self, selector: #selector(anyOtherCellPressed))]
        tableView.reloadData()
    }

    @objc private func firstCellPressed() {
        print("First cell pressed")
    }

    @objc private func anyOtherCellPressed(sender: UIButton) {
        print("Cell at row \(sender.tag) pressed")
    }

}

fileprivate extension MyViewController {

    struct CellData {
        let index: Int
        let title: String?
        let image: UIImage?
        let target: Any?
        let selector: Selector
    }

}

extension MyViewController: UITableViewDataSource {

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "myCellIdentifier", for: indexPath) as! MyTableViewCell // Dequeue cell
        let source = dataSource[indexPath.row] // Get the source object
        cell.button.tag = indexPath.row // Assign tag so we can use it in the button action method

        // Assign target and selector if it exists
        if let target = source.target {
            cell.button.addTarget(target, action: source.selector, for: .touchUpInside)
        }
        cell.cellImageView.image = source.image // Assign image
        cell.label.text = source.title // Assign title
        return cell
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataSource.count
    }

}

尽管这与我想做的还相去甚远,但请随意尝试。

关于ios - 如何在自定义单元格中添加按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44327412/

相关文章:

ios - 网格的简单布局数学

ios - 核心位置在 iOS 8 中不起作用

ios - swift 中的 barTintColor

ios - 如何根据按钮框架正确计算 cornerRadius

ios - 如何将圆形动画应用于单元格?

ios - 禁用自动调整 uitableView 插图

swift - 无法调用没有参数 UITableViewController 的 reloadData

ios - 快速确定某一行是否从 View 中消失

ios - SWIFT:排序 TableView 并将数据传递给第二个 viewController

ios - CCJumpTo 和 CCJumpBy 高度参数?