Intereting Posts
UIViewAlertForUnsatisfiableConstraints точка останова без предупреждения консоли Есть ли locationChange equlivent для PhoneGap InAppBrowser, как в ChildBrowser хранить адресную книгу в массиве в iPhone Удаление сиротских объектов в restKit 0.20 Единичный тест Swift с сторонней библиотекой Простой NSPredicate @ "1 == 0" не фильтрует полученные результаты? Нет видимого @interface 'PhotosTableViewController' объявляет селектор 'viewWithImageName' Xcode Не удалось создать профиль подготовки Как сохранить перечисление в Mutable Array в быстром преобразование NSData pdf в NSData файла образа UIBarButtonItem -appereanceWhenContainedIn: и пользовательский подкласс UINavigationBar iOS: как оживить заполнение в uibezier пути? iOS: Можно ли запустить звонок из фона в собственном приложении без джейлбрейка устройства? Как сделать iOS navigationItem.titleView выровненным влево? Как разрешить двум перекрывающимся представлениям получать события пользовательского касания ios

Цель C: Текст ячейки исчезает после прокрутки экрана (и обратно)

Я создаю контроллер с UITableview, который содержит 2 раздела. Во втором разделе у меня есть список пользователей, которым я хочу добавить галочку пользователю в списке, когда я нажимаю на определенную строку. У меня проблема, когда после нажатия на пользователя и прокрутки ячейки из страницы ячейка возвращается с полем «имя» BLANK (см. Снимок экрана ниже). Я знаю, что это связано с тем, как ящики повторно используются, но я не в состоянии разглядеть точную проблему. Мой код размещен ниже. Есть рекомендации?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString* ShareOnCellIdentifier = @"ShareOnholderCell"; static NSString* WhoShouldAnswerCellIdentifier = @"WhoShouldAnswerCell"; int row = [indexPath row]; User *user = [self.friendsToShareWithArray objectAtIndex:row]; if (indexPath.section == 0) { UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:ShareOnCellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ShareOnCellIdentifier]; } cell.textLabel.text = [self.shareOnArray objectAtIndex:indexPath.row]; return cell; } else { UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:WhoShouldAnswerCellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:WhoShouldAnswerCellIdentifier]; } cell.textLabel.text = user.nickname; if (user.isSelected) { cell.selectionStyle = UITableViewCellAccessoryCheckmark; } else { cell.selectionStyle = UITableViewCellSelectionStyleNone; } return cell; } } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { User *user = [self.friendsToShareWithArray objectAtIndex:indexPath.row]; if (indexPath.section == 1) { UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; if (cell.accessoryType == UITableViewCellAccessoryCheckmark) { cell.accessoryType = UITableViewCellAccessoryNone; user.isSelected = NO; } else { cell.accessoryType = UITableViewCellAccessoryCheckmark; user.isSelected = YES; } } } 

EDIT: пример того, как я создаю свой пользовательский объект

 User *user1 = [[User alloc]init]; user1.nickname = @"Dionis"; user1.uid = @"1"; user1.isSelected = NO; 

Solutions Collecting From Web of "Цель C: Текст ячейки исчезает после прокрутки экрана (и обратно)"

Единственная проблема, которую я вижу, заключается в том, как вы реализовали метод didSelectRowAtIndexPath:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == 1) { User *user = [self.friendsToShareWithArray objectAtIndex:indexPath.row]; user.isSelected = !user.isSelected; [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; } } 

У меня была такая проблема в прошлом, потому что я не cellForRowAtIndexPath что в основном каждый раз, когда ячейка появляется в прокручиваемом UITableView , она будет запрошена повторно через cellForRowAtIndexPath . Я не вижу здесь ошибки (вы всегда устанавливаете текст метки), но в этот момент я предлагаю проверить текст метки после ее установки:

 if (!cell.textLabel.text || [[cell.textLabel.text stringByReplacingOccurrencesOfString:@" " withString:@""] isEqualToString:@""]) NSAssert(NO, @"Bad text!"); 

NSAssert debug, это будет «сбой» в NSAssert если текст пуст или равен нулю. Тогда вы можете проверить окружающие переменные (может ли user быть нулевым или что-то в этом роде?) И узнать больше.