2014-08-19 4 views
0

Я использую 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]; 

ответ

1

Соблюдайте XCO de 6 new storyboard W:any H:any, поэтому, если вы пытаетесь открыть это в xcode 5, ваш xcode 5 не знает, какие новые функции введены, поэтому иногда весь ваш взгляд перепутался. Я испытал это!поэтому всегда беру обратно с такими экспериментами, но

Ниже код отлично работает в Xcode бета 4

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
     { 
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 
    UILabel *headLinesLabel = (UILabel *)[cell viewWithTag:101]; 
      headLinesLabel.text = newsData.headlineTitle; 
    } 
+0

Большое спасибо за ваш ответ. На самом деле я правильно настроил настройку «W: Any H: Any», однако понял, что в вызове 'dequeueReusableCellWithIdentifier' отсутствует параметр' forIndexPath: indexPath'. Непонятно, почему теперь вам нужно использовать этот дополнительный параметр с XCode 6. Он отлично работал без него в XCode 5. – Kerollmops

+0

Разница в том, что '- (id) dequeueReusableCellWithIdentifier: (NSString *) identifier; // Используется делегатом для получения уже выделенной ячейки, но - (id) dequeueReusableCellWithIdentifier: (NSString *) идентификатор forIndexPath: (NSIndexPath *) indexPath // новый метод dequeue гарантирует, что ячейка возвращается и изменена правильно, при условии, что идентификатор зарегистрирован ' – codeIgnitor

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

  • Нет связанных вопросов^_^