UITableViewCell - ноль, если он не виден - PullRequest
0 голосов
/ 02 марта 2012

В моем приложении я использую ELCTextfieldCell.Идея состоит в том, чтобы использовать данные, введенные пользователем для некоторых расчетов.Но есть проблема.У меня есть около 14 ячеек, и, конечно, они не могут все уместиться на экране.Поэтому, когда я нажимаю OK, приложение проверяет, заполнены ли все поля:

BOOL complete = YES;
for (int i = 0; i < [cellTextArray count] - [self.numberOfBools intValue]; i++) {
    NSIndexPath *iPath = [NSIndexPath indexPathForRow:i inSection:0];
    ELCTextfieldCell *theCell = (ELCTextfieldCell *)[self.tableView cellForRowAtIndexPath:iPath];
    if (!theCell.rightTextField.text)
        complete = NO;
}

Этот код отлично работает, если все ячейки видны, но если некоторые отсутствуют, то complete становитсяNO.Вывод theCell в gdb:

(gdb) po theCell
Can't print the description of a NIL object.

Может кто-нибудь подтолкнуть меня в правильном направлении, пожалуйста?:)

Буду признателен за любую помощь, спасибо.

РЕДАКТИРОВАТЬ

self.numberOfBools - это всего лишь NSNumber с общим количеством операций вэти строки.Они используют UISwitches, а не UITextField в качестве других ячеек, поэтому я исключил их из проверки.

Ответы [ 3 ]

1 голос
/ 02 марта 2012

Заполнение необходимо рассчитывать по данным, которые поддерживают ячейки, а не по самим ячейкам.Позвольте мне объяснить.

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

Однако cellForRowAtIndexPath: создает ячейку из данных, верно?(или это нормально), поэтому, когда пользователь обновляет cell.rightTextField, вы должны обновить data.rightTextField, а затем завершить, должно выглядеть что-то похожее ... и этот псевдокод не компилируется

complete = YES;
for (Data* data in myDataSet) {
    if (!data.rightTextField)
        complete = NO;
}

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

1 голос
/ 02 марта 2012

Это по замыслу.Ячейки в UITableView можно использовать повторно, и они могут быть освобождены, если они невидимы для экономии ресурсов.Вы должны хранить свои данные где-то еще, чем в ячейках.

0 голосов
/ 02 марта 2012

Я согласен с Дамо и Антициклопом здесь.В первую очередь вы должны были обновить

theCell.rightTextField.text

в своем источнике данных своей таблицы.

Тогда вы можете сделать свой расчет на основе источника данных.Пусть textFieldArray будет источником данных вашей таблицы.

NSMutableArray *textFieldArray;

myTableView.dataSource = textFieldArray;

Затем необходимо обновить источник данных при обновлении текстового поля.Наконец, вы можете обработать источник данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...