2015-06-12 2 views
-1

Я выполняю упражнение, в котором я использую табличное представление, каждая строка которого состоит из 4 кнопок. Что я хочу сделать, это нажать кнопку в каждой строке, чтобы изменить ее состояние (от обычного до выделенного). Вопрос в том, что ячейка автоматически дублирует мое нажатие, чтобы некоторые кнопки, на которые я не касался, были подсвечены. Кроме того, каждый раз, когда я просматриваю вид в таблице и возвращаюсь в предыдущую позицию, выделенная позиция кнопки будет автоматически изменена.Как предотвратить UITableViewCell от дублирования и повторного использования?

Я предполагаю, что это должно иметь какое-то отношение к механизму dequeReusableCell, который я использую в своем коде. Как предотвратить это? Заранее спасибо!

Код для построения ячейки:

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
       let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! ChoiceCell 
      cell.selectionStyle = .None 
     return cell 
+0

Я считаю, что ваша проблема заключается в том, как вы строите объект 'cell' не в его повторном использовании. Пожалуйста, добавьте код метода cellForRowAtIndexPath: 'и как вы обрабатываете действие кнопки. – Gandalf

+0

Код добавлен. Благодарю. Я использую метод 'deque' –

ответ

5

Вы абсолютно не хотите, чтобы предотвратить процесс клеток от извлечения из делать то, что он делает. Это неправильный подход.

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

Теперь, когда эта ячейка прокручивается, ее можно повторно использовать, чтобы представить что-то еще в модели данных. Затем, когда мы прокручиваем и мы готовы снова представлять этот исходный объект данных, мы используем нашу модель данных, чтобы установить ячейку в правильное состояние.

+0

Спасибо за ваш ответ. Проблема заключается, например, при нажатии первой кнопки в первой строке, первая кнопка в седьмой строке также становится черной (так как это первая ячейка, которая не отображается в поле зрения). И когда используется второй ряд, соответствующая кнопка в восьмой ячейке также выделяется и т. Д. Как исправить эту проблему? Большое спасибо. –

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