2014-09-27 3 views
10

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

Это те две строки кода, которые имеют важное значение в 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

+0

Что относительно ячейки? Является ли он возвращением нуля для ячейки? В моем случае я получаю ноль за ячейку. –

+0

Ответ на этот вопрос [здесь] [1] [1]: http://stackoverflow.com/questions/26344106/viewwithtag-returns-nil-on-uitableviewcell-only-first-time –

+0

Возможно, вы загружаете данные до того, как вид виден ... попытайтесь перезагрузитьДата в viewDidAppear – Yanchi

ответ

0

Try отлаживать Просмотр иерархии.

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

приятное умение, но не работает для этой проблемы. – c9s

5

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

+0

это работает, это довольно странно. – c9s

11

Снимите флажок «Размер классов» в раскадровке и очистите & Создайте приложение. Теперь он должен работать.

+2

Есть ли обходной путь, если мне нужно ** Разделы классов ** для включения? –

+3

Снимите флажок «Очистить» и «Смонтировать» и «перепроверять». Выбор классов размеров –

0

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

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

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 напрямую, создать экземпляр этого идентификатора и не больше нуля в tableView dequeueReusableCellWithIdentifier или cell viewWithTag:, возвращая нуль.

2

Попробуйте сделать вид «installed», проверить это link:

+1

Необходимо выполнить некоторые серьезные работы на этом «установленном» классе размеров! –

0

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

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

Смежные вопросы