2016-01-14 2 views
0

Я видел несколько похожих сообщений о том, что ячейки Prototype не обновляются, и после попытки пройти через кучу ответов я должен опубликовать свой вопрос. Как и многие, я создал подкласс UITableViewCell и связал несколько свойств с его прототипом ячейки в Xcode. .hПользовательский UITableViewCells не обновляется (ячейка прототипа)

Пользовательские Ячейки

@property (strong, nonatomic) IBOutlet UILabel *playerNameLabel; 
@property (strong, nonatomic) IBOutlet UILabel *positionLabel; 
@property (strong, nonatomic) IBOutlet UILabel *playersPositionLabel; 
@property (strong, nonatomic) IBOutlet UILabel *teamLabel; 
@property (strong, nonatomic) IBOutlet UILabel *playersTeamLabel; 
@property (strong, nonatomic) IBOutlet UIImageView *logoView; 
@property (strong, nonatomic) IBOutlet UIView *layerView; 

И в моем файле ViewController, я использую следующий код.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
PlayerTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"playerCell" forIndexPath:indexPath]; 

if ([self.playerSearchBar.text isEqualToString: @""]) { 

    Player *player = self.playerArray[indexPath.row]; 

    cell.playerNameLabel.text = player.fullName; 
    cell.playersPositionLabel.text = player.position; 
    cell.playersTeamLabel.text = player.team; 

} else { 

    Player *player = self.filteredPlayerArray[indexPath.row]; 

    cell.playerNameLabel.text = player.fullName; 
    cell.playersPositionLabel.text = player.position; 
    cell.playersTeamLabel.text = player.team; 

} 
return cell; 
} 

Что интересно, что данные есть, я могу видеть это в отладчике, но никаких ярлыков не обновляется. Раньше я делал это с помощью тегов, но, поскольку я делаю дизайн ячеек более сложным, я перешел к подклассу. Есть ли что-то, что мне здесь не хватает?

Screenshot

+0

Уверен: вы связали выходы в построителе интерфейса? –

+0

Конечно! Тройной проверить это. – pennyloaf

+0

Вы зарегистрировали свою собственную ячейку? –

ответ

0

Так что решение для этого немного необъяснимо. Я удалил все свои IBOutlets и воссоздал их и снова подключил их. Теперь все работает так, как должно было быть. Для контекста они были правильно подключены к раскадровке до того, как я удалил их.

-1

Всегда cellForRowAtIndexPath метод возвращает ту же ячейку. Поэтому, пожалуйста, обновите свои методы первой строкой, как показано ниже.

PlayerTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"playerCell"]; 

Это может решить эту проблему. Предполагая, что у вас есть правильное имя identifier в раскадровке i.e playerCell

+1

dequeueReusableCellWithIdentifier: только старше dequeueReusableCellWithIdentifier: forIndexPath: компания Apple рекомендует использовать новые версии –

+0

FYI, Ofcourse яблоко может рекомендовать, но в соответствии с необходимостью, что этот парень есть, там нет каких-либо преимуществ использования dequeueReusableCellWithIdentifier : forIndexPath:. –

0

Я думаю, что, скорее всего, вам не хватает этого ..

[self.tableView registerNib:[UINib nibWithNibName:@"YourCustomCellNibName" bundle:nil] 
forCellReuseIdentifier:@"playerCell"]; 

В Tableview: cellForRowAtIndexPath:, когда мы называем dequeueReusableCellWithIdentifier: forIndexPath :, если таблица не имеет свободной многоразовой клетки уже существует, то nib будет автоматически загружен, и ячейка будет создана из него и вернется к нам.

0

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

Первое, что приходит мне на ум, состоит в том, что, возможно, playerArray или filteredPlayArray не установлены, но тогда он будет отображать не что иное, как текст заполнителя. Поэтому я не думаю, что это решит вашу проблему. В любом случае, попробуйте проверить это. Вы также отметили, что cell.playerNameLabel действительно установлен на значение, отличное от нуля? Если нет, это также может быть проблемой Xcode, если все соединения выполнены правильно. Попробуйте перезапустить Xcode и снова подключить все IBOutlets.

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