2016-12-31 1 views
1

У меня есть TableView, установленный как итерация пользовательского класса ячеек. Каждая ячейка (в обеих двух разделах) содержит несколько меток и кнопку. Для ячеек во втором разделе текст кнопки программно устанавливается на «Отмена», а в первой секции - на что-то другое. Я поставил кнопку (для ячеек, button.title равно «Отменить»), чтобы серым цветом тексты меток путем уменьшения значения альфа следующим образом после того, как нажата кнопка выглядит следующим образом:Несколько UITableViewCells подвергаются воздействию итерационной кнопки, несмотря на то, что нажата только одна кнопка?

@IBAction func mainPageCancelAction(_ sender: Any) { 
     if mainPageCancelButton.title(for: .normal) == "x"{ //1st section cell 
      mainPageCancelButton.setTitle("y", for: .normal) 
     } else if mainPageCancelButton.title(for: .normal) == "y"{//1st section cell 
      mainPageCancelButton.setTitle("x", for: .normal) 
     } else if mainPageCancelButton.title(for: .normal) == "Cancel"//2nd section cell { 
      mainPageUnattendCancelButton.setTitle("Canceled", for: .normal) 
      NameLabel.alpha = 0.3 
      CreatorLabel.alpha = 0.3 
      TypeLabel.alpha = 0.3 
     } 
} 

Насколько я могу скажите, что эта кнопка должна только опускать метки (уменьшая значения альфа) во втором разделе, где кнопка установлена ​​как «Отмена». Нажатие на кнопку в любой из этих ячеек второго раздела действительно снижает альфа-значения для этой ячейки, но также случайным образом (я думаю, что это случайное ...) выделяет некоторые ярлыки для первых секций секции, даже если они не должны влиять на это действие, поскольку они не удовлетворяют заявлению if Button.title(for: .normal) == "Cancel" if. Их названия - x и y. Не знаю, почему это происходит. Я решил, что рудиментарный оператор if, хотя и упрощен, должен гарантировать, что ни одна из ярлыков первого раздела не будет изменена изменением значения альфа, так как их button.title никогда не может быть «Отмена». Не знаете, почему это происходит, тем более, что клетки второго раздела влияют правильно; только клетки с нажатой кнопкой будут серыми.

+1

ли ваши клетки в обе секции имеют одинаковую reuseidentifier? Может ли быть, что значения альфа для переработанных ячеек в разделе 1 используют значения, которые были установлены ранее в разделе 2? Сбрасываете ли значения альфа-значения по умолчанию при создании каждой ячейки? – Magnas

+0

@Magnas да, они имеют одинаковый идентификатор повторного использования. Они являются одними и теми же ячейками, а только метки имеют разные значения в зависимости от раздела. Как бы сбросить значения альфа? –

+0

@ Маньяс выясняется, что проблему можно решить, просто сделав так, как вы предполагали. Установка альфа-значений по умолчанию 1.0 для ячеек в первом разделе. –

ответ

0

Являются ли этикетки серыми в других ячейках сразу же при нажатии кнопки? Или только после прокрутки?

Если это происходит после прокрутки, проблема может быть связана с тем, что ячейки повторно используются. Если это так, вы должны убедиться, что состояние ячеек сбрасывается на что-то разумное. Хорошее место для этого является переопределение prepareForReuse() в классе клеток:

override func prepareForReuse() { 
    super.prepareForReuse() 

    nameLabel.alpha = 1 
    creatorLabel.alpha = 1 
    typeLabel.alpha = 1 
} 
+0

Последовательность посещений происходит сразу же после нажатия кнопки –

+0

В этом случае я проверю, имеет ли кнопка несколько целей. Используйте свойство allTargets кнопки - должно быть только одно. Случайное вызов addTarget (_: action: for :) несколько раз может заставить кнопку вызывать действие по нескольким целям при нажатии. – nils

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