2014-01-06 1 views
0

Я новичок в iOS, и у меня возникают проблемы с добавлением/удалением сотового аксессуараTypeCheckmark, когда пользователь выбирает ячейку. У меня есть список друзей в UITableView, и пользователь должен иметь возможность выбирать нескольких друзей и иметь галочку рядом с ними. Если пользователь нажимает на друга, который уже был выбран, галочка должна исчезнуть. Я отслеживаю друзей, которые были выбраны в NSMutableArray под названием «friends_selected».Не удается обновить cellaccessory в didSelectRowAtIndexPath

У меня есть путь cellForRowAtIndex, чтобы проверить, содержит ли массив friends_selected имя пользователя, и если да, добавьте галочку.

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

cell.usernameID.text = [self.friends_username objectAtIndex:indexPath.row]; 

if ([self.friends_selected containsObject:cell.usernameID.text]) { 

    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 
else { 

    cell.accessoryType = UITableViewCellAccessoryNone; 
} 

return cell; 
} 

В моей didSelectRowAtIndexPath я добавление или удаление имени пользователя из friends_selected массива и перегрузочные данные таблицы.

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
FriendsListCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

cell.usernameID.text = [self.friends_username objectAtIndex:indexPath.row]; 

if ([self.friends_selected containsObject:cell.usernameID.text]) { 

    [self.friends_selected removeObject:cell.usernameID.text]; 
} 
else { 

    [self.friends_selected addObject:cell.usernameID.text]; 
} 
[tableView reloadData]; 
} 

Сейчас friends_selected массив правильно обновить с помощью которого имена были выбраны или отменить. Не отображаются флажки, однако ячейка станет подсвеченной при выборе и останется подсвеченной, даже если она не выбрана. Любая помощь была бы замечательной, я весь день простаивал по этой проблеме, которая кажется простым решением.

ответ

2

В вашем методе didSelectRow... следует заменить:

FriendsListCell *cell = (FriendsListCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

с:

FriendsListCell *cell = (FriendsListCell *)[tableView cellForRowAtIndexPath:indexPath]; 

Вы не хотите новую ячейку, вы хотите фактическую ячейку для выбранной строки.

И не звоните reloadData тоже. Либо обновите ячейку напрямую, либо просто вызовите reloadData, а не оба.

+0

Спасибо, что была проблема! Знал, это было что-то простое. Если вы сделаете это без ввода типа ячейки, вы получите сообщение об ошибке, так что должно быть: FriendsListCell * cell = (FriendsListCell *) [tableView cellForRowAtIndexPath: indexPath]; –

+0

Я забыл бросок. Я обновил ответ. – rmaddy

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