2015-02-28 4 views
-2

Я создаю приложение для повышения производительности в Swift. Я не использую прототип ячейки в раскадровке, так как большая часть из них уже написана в коде. Я хотел бы установить флажок. Как бы я это сделал?Как добавить кнопку в ячейку таблицы в iOS?

+0

Вам необходимо создать свой флажок и добавить его в виде суб-представления в свою ячейку. Серьезно, хотя Interface Builder позволит вам сделать это примерно через 5 секунд. – Paulw11

ответ

2

Хотя ответ Тима технически правильный, я бы не советовал это делать. Поскольку UITableView использует механизм dequeuing, вы можете фактически получить повторно используемую ячейку, у которой уже есть кнопка (потому что вы добавили ее ранее). Таким образом, ваш код фактически добавляет к нему вторую кнопку (и третий, четвертый и т. Д.).

Что вы хотите сделать, это создать подкласс из 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!; 
0

Ну, в первую очередь, ваш cellForRowAtIndexPath должен, вероятно, использовать механизм dequeue, чтобы вы не воссоздавали ячейки каждый раз при виртуализации.

Но в остальном все, что вам нужно сделать, это создать кнопку и добавить ее в виде суб-представления в ячейку.

cell.addSubview(newButton) 

Но, конечно же, вам необходимо будет управлять калибровкой и компоновкой по мере необходимости.

+0

Спасибо. Все еще немного смутно. Можете ли вы привести пример (со случайным размером/макетом)? – nintyapple

+0

Я мог бы, но это могло бы стать довольно длинным. Вместо этого ознакомьтесь с этим руководством: http://makeapppie.com/tag/addsubview-in-swift/ – Tim

0

UITableViewCell также имеет выбранное состояние и доступный didSelect и didDeselect метода, который слушает стучит по всей клетке. Возможно, это немного более практично, поскольку вы, похоже, хотите проверить/снять флажки, что более или менее равнозначно выбору. Вы можете установить ячейку в выбранном состоянии сразу после ее удаления.

Смежные вопросы