Почему UItableViewCell viewWithTag возвращает нуль?

Я использую IOX8 и Xcode 6. Я создал таблицу с ячейкой customtype в раскадровке, и я поместил в нее ярлык. Я ввел номер тега для метки в IB, чтобы я мог получить ссылку на метку в моем коде. Но когда я пытаюсь получить ссылку на метку внутри моей "cellForRowAtIndexPath", используя viewWithTag, я получаю NIL для метки:

Это две строки кода, которые важны для cellForRowAtIndexPath:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"PlayerCell"];


UILabel *nameLabel = (UILabel *)[cell viewWithTag:1];

Линия "cell viewWithTag: 1" возвращает NIL, я не понимаю, почему.

Я также пробовал "cell.contentView withWithTag: 1", и это тоже не сработало.

Является ли это ошибкой в ​​IOS 8 или Xcode 6?

спасибо

-Malena

Ответ 1

Снимите флажок "Параметры класса" в раскадровке и очистите и создайте приложение. Теперь он должен работать.

Ответ 2

Я столкнулся с той же проблемой, когда использовал IOS8 и Xcode 6.1. Я обнаружил, что если включить Size Classes, viewWithTag всегда возвращать nil. Я думаю, что это может быть ошибка для Xcode 6.x. Просто отключите Size Classes, все будет нормально.

Ответ 3

Попробуйте сделать представление 'installed', проверьте ссылку:

Ответ 4

Попробуйте отладить Просмотр иерархии.

  • Запустите приложение в режиме отладки
  • Посмотрите, где сидит UITableViewController;
  • В Xcode нажмите: Debug- > View Debugging- > Capture View Hierarchy;
  • Проверить теги погоды назначены должным образом.

Ответ 5

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

В моем случае в предыдущем представлении контроллера у меня было:

RoutePreview *rs = [[RoutePreview alloc] init];
rs.rota = [availableRoutes objectAtIndex:indexPath.row];

[self.navigationController pushViewController:rs animated:YES];

Я заменил это на

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SBIPhone" bundle:[NSBundle mainBundle]];
RoutePreview *xpto = [storyboard  instantiateViewControllerWithIdentifier:@"RouteSummary"];
xpto.rota = [availableRoutes objectAtIndex:indexPath.row];
[self.navigationController pushViewController:xpto animated:YES];

Проблема исчезла.

В основном вместо того, чтобы создавать экземпляр tableviewcontroller напрямую, создайте его с помощью идентификатора и не больше nill-ячейки в tableView dequeueReusableCellWithIdentifier или cell viewWithTag:, возвращающей нуль.

Ответ 6

Я ошибочно сделал 2 прототипа UITableViewCell, один на раскадровке, где я дал ему номер тега, и один в моем коде, где я зарегистрировал его файл Nib. Это вызвало замешательство, и я не мог ухватиться за представление с помощью тега. Мой, например, let nib = UINib(nibName: "DetailTableViewCell", bundle: nil) tableView.register(nib, forCellReuseIdentifier: "headerViewCell")

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