Странное поведение UITableView с использованием viewWithTag - PullRequest
0 голосов
/ 30 июня 2018

У меня в табличном представлении UILabel, и я вручную установил для тега значение 1

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

Но когда я щелкаю в ячейке и снова прокручиваю вниз, иногда на ярлыке из ячейки появляется ошибка:

нераспознанный селектор отправлен на экземпляр 0x7fc01d74a710 <- это мой ярлык, и я напечатал описание ошибки: </p>

Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [Mediprecios.RotatedView setText:]: нераспознанный селектор, отправленный экземпляру 0x7f8d9073f4f0' И вылетает в методе cellForRowAtIndexPath в labelName.text = name;

po 0x7fc01d74b370
<Mediprecios.RotatedView: 0x7fc01d74b370; frame = (0 100; 345 100); alpha = 0; tag = 1; layer = <CALayer: 0x600000827dc0>>

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

   UILabel *labelName = [cell viewWithTag:1];
   NSString *name = [displayItems objectForKey:@"Name"];
   labelName.text = name;

   return cell;
}

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

   FoldingCell *cell = [tableView cellForRowAtIndexPath:indexPath];

   if (cell.isAnimating) {
       return;
   }

   double duration = 0;
   NSNumber *height = [self.cellHeights objectAtIndex:indexPath.row];
   bool cellIsCollapsed = height.floatValue == self.kCloseCellHeight;
   if (cellIsCollapsed) {
        [self.cellHeights setObject:[NSNumber numberWithFloat:self.kOpenCellHeight] atIndexedSubscript:indexPath.row];

    [cell unfold:YES animated:YES completion:nil];
    duration = 0.5;

} else {
    [self.cellHeights setObject:[NSNumber numberWithFloat:self.kCloseCellHeight] atIndexedSubscript:indexPath.row];
    //[cell selectedAnimation:false animated:true completion: nil];
    [cell unfold:NO animated:YES completion:nil];
    duration = 0.8;
}

[UIView animateWithDuration:duration delay:0 options:0 animations:^{
    [tableView beginUpdates];
    [

tableView endUpdates];
    } completion:nil];

}

PD: я использую эту библиотеку https://github.com/Ramotion/folding-cell

1 Ответ

0 голосов
/ 30 июня 2018

Посмотрите на ошибку [Mediprecios.RotatedView setText:] Ваш код на самом деле пытается вызвать метод setText для представления, а не для метки.
UILabel *labelName = [cell viewWithTag:1]; Полагаю, в вашей ячейке есть UIView с тегом 1, а не UILabel.
Следовательно, labelName.text = name; эта строка фактически пытается установить текст на UIView, так как labelName является UIView.

Попробуйте изменить тег на большое случайное число, например 35432, и проверьте.

Вышеупомянутое решение - временная работа, чтобы избавиться от ошибки. Хорошей практикой будет создание собственной реализации FoldingCell путем создания ее подкласса и подключения IBOutlet вашей метки к классу ячейки и доступа к ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...