我正在Swift中创建一个生产力应用程序。我没有在Storyboard中使用原型单元,因为大部分单元格已经用代码编写。我想要一个复选框按钮。 我该怎么做呢?
答案 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还具有选定的状态以及可用于侦听整个单元格上的点击的didSelect和didDeselect方法。也许这更加实用,因为您似乎想要选中/取消选中复选框,这与选择大致相同。您可以在将单元格出列后立即将单元格设置为选定状态。