viewWithTag: возвращает ноль после reloadData
У меня есть tableView с 6 строками, сделанные с пользовательской ячейкой.
Пользовательская ячейка имеет UILabel и UISwitch. В методе "cellForRowAtIndexPath:" у меня есть:
static NSString *CellIdentifier = @"optionsCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
UISwitch *optionsSwitch = (UISwitch *)[cell viewWithTag:300];
UILabel *optionsLabel = (UILabel *) [cell viewWithTag:200];
NSLog(@"%@", optionsSwitch);
NSLog(@"%@", optionsLabel);
Когда впервые создается tableView (из раскадровки), я правильно получаю два объекта (я добавляю результат только для первой строки табличного представления):
но когда я отправляю метод reloadData в tableView (состояние UISwitch может быть изменено программно, поэтому я обновляю представление таблицы перед его отображением), я правильно получаю UILabel, пока UISwitch равен nil:
Почему UILabel работает, а UISwitch - нет?
UISizeClasses не включен, как предложено в другом посте относительно этой проблемы.
Спасибо, Коррадо
1 ответ
Вы изменяете тэг переключателя где-то еще в коде, вероятно, чтобы при смене переключателя вы могли получить номер строки из него.
На самом деле у вас должна быть пользовательская ячейка, имеющая выходы для представлений, поэтому вам вообще не нужно использовать теги, и ячейка должна обрабатывать изменения переключателя, чтобы обновить модель или вызвать некоторый обратный вызов для контроллера представления.