Как вы изменяете textLabel, когда выбран UITableViewCell? - PullRequest
8 голосов
/ 04 декабря 2009

Я хочу изменить textLabel и detailTextLabel ячейки, когда она была выбрана. Я пробовал следующее, но никаких изменений не происходит:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    MyAppDelegate *appDelegate = (MyPhoneAppDelegate*)[[UIApplication sharedApplication] delegate];

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.detailTextLabel.text = @"xxxxx";
    cell.textLabel.text =       @"zzzzz";
    [tableView reloadData];
}

Ответы [ 6 ]

10 голосов
/ 20 апреля 2010

Я согласен, перезагрузка табличного представления фактически сбросит и перезагрузит / отобразит все ячейки, используя tableView:cellForRowAtIndexPath: и использует исходные данные, а не обновленные @ "xxxxx" и @ "yyyyy" в вашем методе tableView:didSelectRowAtIndexPath:. 1003 *

В небольшом тестовом проекте мне удалось изменить метки при выборе:

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

    UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.textLabel.text = @"it was tapped";
}
2 голосов
/ 11 июля 2012

Попробуйте перезагрузить ячейку, которую вы выбрали (описывается indexPath):

[yourTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
2 голосов
/ 12 декабря 2009

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

[cell setNeedsLayout]

после внесения вышеуказанных изменений в ярлыки.

Кроме того, есть ли причина, по которой вы делаете ссылку на делегат приложения в методе?

0 голосов
/ 19 ноября 2014

Не уверен, что вы пытаетесь сделать с делегатом, но вы должны попытаться вызвать уже созданный экземпляр tableView; то есть звоните

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath: indexPath];

Может быть, я не ясно Я хочу сказать, что вы создаете новую пустую таблицу

UITableViewCell *cell = [**tableView** cellForRowAtIndexPath: indexPath]; //cell has nothing it is new.

рассмотрите возможность замены, чтобы позвонить старому

UITableViewCell *cell = [**self.tableView** cellForRowAtIndexPath: indexPath]; //now you have one that has a textField already in it
0 голосов
/ 08 февраля 2011

Создайте новый проект iPad (Split View) и теперь пройдите через Classes-> Files Самый простой способ был дан там. Сгенерированные коды XCode.

Пример строки кода: -

cell.textLabel.text = [NSString stringWithFormat:@"Row %d", indexPath.row];

Вы можете использовать их в cellForRowAtIndexPath ||&& didSelectRowAtIndexPath ..

0 голосов
/ 10 декабря 2009

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

[cell setNeedsDisplay];

вместо

[tableView reloadData];

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

...