如何在iOS中向表格视图单元格添加按钮?

时间:2015-02-28 22:23:55

标签: ios uitableview swift tableviewcell

我正在Swift中创建一个生产力应用程序。我没有在Storyboard中使用原型单元,因为大部分单元格已经用代码编写。我想要一个复选框按钮。 我该怎么做呢?

3 个答案:

答案 0 :(得分:2)

虽然Tim的答案在技术上是正确的,但我不建议这样做。因为UITableView使用了一个出列机制,你实际上可以接收一个已经有一个按钮的重用单元格(因为你之前添加了它)。所以你的代码实际上是为它添加第二个按钮(以及第3个,第4个等)。

你想要做的是从UITableViewCell创建一个子类,它在实例化时为自己添加一个按钮。然后你就可以从你的UITableView中取出那个单元格,它会自动将你的按钮放在它上面,而不需要在cellForRowAtIndexPath方法中进行。

这样的事情:

class MyCustomCellWithButton: UITableViewCell {

    var clickButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton;

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier);

        self.contentView.addSubview(self.clickButton);

    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

然后你可以在cellForRowAtIndexPath像这样出现它。

var cell = tableView.dequeueReusableCellWithIdentifier("my-cell-identifier") as? MyCustomCellWithButton;
if (cell == nil) {
    cell = MyCustomCellWithButton(style: UITableViewCellStyle.Default, reuseIdentifier: "my-cell-identifier");
}       
return cell!;

答案 1 :(得分:0)

好吧,首先你的cellForRowAtIndexPath应该使用dequeue机制,这样你每次虚拟化时都不会重新创建单元格。

但除此之外,您需要做的就是创建按钮,并将其作为子视图添加到单元格中。

cell.addSubview(newButton)

但当然,您必须适当地管理尺寸和布局。

答案 2 :(得分:0)

UITableViewCell还具有选定的状态以及可用于侦听整个单元格上的点击的didSelectdidDeselect方法。也许这更加实用,因为您似乎想要选中/取消选中复选框,这与选择大致相同。您可以在将单元格出列后立即将单元格设置为选定状态。