2015-04-04 4 views
0

У меня есть tableView с 6 строками, выполненными с пользовательской ячейкой.viewWithTag: возвращает nil после reloadData

Пользовательская ячейка имеет 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 сначала обрабатывается (от раскадровки) я правильно получить два объекта (я добавляя результат только для первой строки таблицы вид):

enter image description here

, но когда я посылаю метод reloadData к Tableview (статус UISwitch может быть изменен программно, так что я обновить TableView перед показом его) я правильно получить UILabel пока UISwitch равна нулю:

enter image description here

Почему UILabel работает и UISwitch нет?

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

Спасибо, Corrado

ответ

1

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

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

+0

На самом деле я не меняю тег: тег назначается только в «cellForRowAtIndexPath:» на основе indexPath.row. Для целей тестирования я даже не изменяю статус или что-либо еще из UISwitch ... Я просто перезаряжаю табличное представление, ничего не меняя. – Corrado

+0

'тег назначается только в" cellForRowAtIndexPath: "на основе indexPath.row' - это проблема, вы не можете этого сделать, а затем повторно использовать ячейку ... – Wain

+0

вы правы, спасибо! – Corrado