Ответ 1
Снимите флажок "Параметры класса" в раскадровке и очистите и создайте приложение. Теперь он должен работать.
Я использую 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
Снимите флажок "Параметры класса" в раскадровке и очистите и создайте приложение. Теперь он должен работать.
Я столкнулся с той же проблемой, когда использовал IOS8 и Xcode 6.1. Я обнаружил, что если включить Size Classes
, viewWithTag
всегда возвращать nil
. Я думаю, что это может быть ошибка для Xcode 6.x. Просто отключите Size Classes
, все будет нормально.
Попробуйте сделать представление 'installed
', проверьте ссылку:
Попробуйте отладить Просмотр иерархии.
Если начальный контроллер представления был моим табличным представлением, все работало, как ожидалось. Когда он пришел с другого контроллера представления, у меня возникли проблемы.
В моем случае в предыдущем представлении контроллера у меня было:
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:
, возвращающей нуль.
Я ошибочно сделал 2 прототипа UITableViewCell
, один на раскадровке, где я дал ему номер тега, и один в моем коде, где я зарегистрировал его файл Nib. Это вызвало замешательство, и я не мог ухватиться за представление с помощью тега.
Мой, например,
let nib = UINib(nibName: "DetailTableViewCell", bundle: nil)
tableView.register(nib, forCellReuseIdentifier: "headerViewCell")
Удаление вышеуказанного фрагмента из моего кода решило проблему. Надеюсь, это поможет любому, у кого есть аналогичная проблема.