Я использую UITableView с ячейками прототипа. Я добавляю пользовательские элементы (UILabel, UIProgressView) к этим прототипам ячеек. Затем я хочу инициализировать эти элементы, используя их теги в cellForRowAtIndexPath.Пользовательские элементы пользовательского интерфейса прототипа ячейки недоступны xcode 6 beta
Выглядит как шаблонный дизайн ... но он не работает. Я не в состоянии получить доступ к UILabel и UIProgressView компоненты с viewWithTag, похоже, нет ничего в contentView внутри клетки прототипа.
Самое смешное, она работает в XCode 5, но не в XCode 6 бета 3 до 5. Кроме того, когда я открываю свой проект с XCode 6, проект, который был первоначально настройка с XCode 5 все испортилась. Я могу отремонтировать его вручную, но затем некоторые объекты больше не видны, как если бы они лежали за пределами экрана. Выход журнала
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellFileDown"];
NSLog(@"cell.contentView subViews: %@", [cell.contentView subviews]);
UILabel *nameLabel = ((UILabel *)[cell.contentView viewWithTag:10]);
nameLabel.text = @"hello test";
NSLog(@"nameLabel: %@", nameLabel);
return cell;
}
консоли:
cell.contentView subViews:()
nameLabel: (null)
...(5 times)
Картина здесь: My screen when I launch IOs Simulator
Здесь можно увидеть, что UILabel опытного образца ячейки не меняется (I уже проверили теги) и UIProgressView находятся за пределами экрана
Это известная ошибка от XCode 6, или это только я, кто не может использовать новый IB?
Я могу добавить все функции вручную, используя contentView addSubview, но, очевидно, я хочу использовать StoryBoard.
EDIT: Решение этого вопроса (@codeIgnitor)
заменить:
cell = [tableView dequeueReusableCellWithIdentifier:@"CellFileDown"];
с:
cell = [tableView dequeueReusableCellWithIdentifier:@"CellFileDown" forIndexPath:indexPath];
Большое спасибо за ваш ответ. На самом деле я правильно настроил настройку «W: Any H: Any», однако понял, что в вызове 'dequeueReusableCellWithIdentifier' отсутствует параметр' forIndexPath: indexPath'. Непонятно, почему теперь вам нужно использовать этот дополнительный параметр с XCode 6. Он отлично работал без него в XCode 5. – Kerollmops
Разница в том, что '- (id) dequeueReusableCellWithIdentifier: (NSString *) identifier; // Используется делегатом для получения уже выделенной ячейки, но - (id) dequeueReusableCellWithIdentifier: (NSString *) идентификатор forIndexPath: (NSIndexPath *) indexPath // новый метод dequeue гарантирует, что ячейка возвращается и изменена правильно, при условии, что идентификатор зарегистрирован ' – codeIgnitor