2015-04-17 2 views
0

У меня есть табличный вид, который перезагружается всякий раз, когда обнаружено новое периферийное устройство. У меня есть кнопка на каждой ячейке. Эта кнопка позволяет добавить периферию к массиву. Теперь, добавив кнопку, я хочу изменить ее на отмену, и это то, что я сделал. Проблема здесь, таблица всегда перезагружается, и, следовательно, кнопка всегда возвращается к исходному состоянию (ADD). Любое решение, пожалуйста?Добавление кнопки в постоянный изменяемый вид таблицы

ответ

1

сделать это в tableView:cellForRowAtIndexPath:

if ([self.arrayOfPeripherals containsObject:peripheralForCell]) 
    [cell.button setTitle:@"Cancel" forState:UIControlStateNormal]; 
else 
    [cell.button setTitle:@"Add" forState:UIControlStateNormal]; 

self.arrayOfPeripherals ваш массив с периферийными устройствами, peripheralForCell ваш объект данных для ячейки в indexPath

1

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

Так что, когда попросили ячейки для данной indexPath по табличном:

1) Dequeue ячейки для indexPath запрошенного.

2) Настройте ячейку так, чтобы она знала, в какой части модели данных это вид. Дисплеи/кнопки в ячейке должны отражать то, что находится в модели данных.

3) В вашей кнопке сделайте целевое действие обновленной моделью данных, а не ячейкой.

4) Если модель данных изменена кнопкой в ​​ячейке, перезагрузите только эту строку, а не всю таблицу. Перезагрузка строки приведет к тому, что таблица попросит новую ячейку, которая теперь будет отражать вашу модель данных.

Это приведет к тому, что ваши ячейки не будут затронуты перезагрузкой таблиц, так как вы сейчас отслеживаете состояние должным образом.

+0

Да, я добавил новое свойство для периферийного устройства, имеющего тип boolean. Всякий раз, когда я нажимаю кнопку, я извлекаю периферию из массива с помощью выбранного индекса, а затем я удаляю объект из этого массива и повторно добавляя обновленный объект в тот же индекс, а затем перезаряжаю таблицу. – Moeit

0

Здесь я предполагаю, что вы храните pheripheral до NSMutableArray. после того, как новый pheripheral обнаружен, вы добавляете это в свой NSMutableArray. при этом вам нужно хранить ключ isPheripheralAdded с каждым содержимым pheripheral.

isPheripheralAdded имеет boolean тип.

Начальная установка isPheripheralAdded флэшка False для всех pheripheral содержит. как только пользователь нажал на кнопку Add. isPheripheralAdded флаг обновляется до True и обновляет содержимое выбранного индекса в NSMutableArray.

Теперь у вас есть isPheripheralAdded = True только для тех, которые вы добавили. прочее есть isPheripheralAdded = False.

Теперь, пока reload table, добавьте следующий код в вас cellForRowAtIndexPath.

if (isPheripheralAdded == True) 
    [cell.button setTitle:@"Cancel" forState:UIControlStateNormal]; 
else 
    [cell.button setTitle:@"Add" forState:UIControlStateNormal]; 

Надеюсь, это поможет вам.

0

Я предлагаю вам создать объект и вставить объекты в ваш массив (если вы еще этого не сделали).Затем создайте для этого объекта BOOL showCanceled. Как только добавленная периферия добавит изменения к этому объекту (в вашем массиве, который вы загружаете для своего TableView), установите showCanceled = YES. Когда вы загружаете TableView, проверьте состояние showCanceled и установите его.

if (showCanceled == YES) 
    [cell.button setTitle:@"Cancel" forState:UIControlStateNormal]; 
else 
    [cell.button setTitle:@"Add" forState:UIControlStateNormal]; 
Смежные вопросы