2016-08-17 2 views
0

Я пытаюсь создать ячейки в моем представлении таблицы, каждый с динамически разрешенными кнопками с правой стороны; некоторые с 2 кнопками, некоторые с 4 кнопками. Проблема заключается в том, что, несмотря на то, что таблица просмотра загружается, как я бы хотел, при прокрутке, ячейки в конечном итоге имеют все четыре кнопки - даже те, которые имели только две руки.Как удержать табличные ячейки от наследования в Swift

Что я делаю неправильно?

Вот мой код:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell 

cell.textLabel?.text = self.items[indexPath.row][0] 
cell.accessibilityLabel = self.items[indexPath.row][bigSort] 

cell.selectionStyle = .None 

for x in 0..<4 
{ 
    let button = UIButton() 
    let marginStart = w - tickWidthInCell * 4 - 9 + (tickWidthInCell + 2) * x 
    let margin = CGFloat(marginStart) 

    button.frame = CGRectMake(margin, CGFloat(cellHeightMargin), CGFloat(tickWidthInCell), CGFloat(tickHeightInCell)) 

    button.layer.borderColor = GRAY.CGColor 

    if (self.items[indexPath.row][1] == "Special" && x % 2 != 0) 
    { 
     button.backgroundColor = UIColor.clearColor() 
     button.layer.borderColor = UIColor.clearColor().CGColor 
     //button.hidden = true 

    } 
    else 
    { 
     button.addTarget(self, action: #selector(cellButtonClicked), forControlEvents: .TouchUpInside) 
     button.backgroundColor = UIColor(netHex:0x222222) 
     button.layer.borderWidth = 1 
    } 
    cell.contentView.addSubview(button) 

} 


return cell 
} 
+1

Думаю, вам не хватает ключевой части кода. Дайте нам весь метод для того, где вы деактивируете ячейку. –

+0

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

+1

Помните, что ячейки снова используются при прокрутке. вам нужно убедиться, что ваша ячейка хороша для повторного использования путем переопределения «readyForReuse» вашего класса ячеек и очистки любого состояния от более ранней инициализации там ... – Shripada

ответ

0

Это потому, что TableView повторно ячейки, которые вы определяете. Чтобы получить контроль над повторным использованием, в вашем обычном UITableViewCell переопределите prepareForReuse. И всегда возвращайте их состояние, которое вы хотите быть, например, чтобы установить ячейку только на 2 кнопки)

Или в cellForRowAtIndexPath вы можете обрабатывать оба случая с двумя кнопками или 4. (когда вы указываете, что хотите 2 убедитесь, что вы спрятали другое 2)