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 ответ

Решение

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

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

Другие вопросы по тегам