Как выделить строку в UITableView - PullRequest
11 голосов
/ 23 декабря 2010

Код ниже, кажется, не имеет никакого эффекта. Я хочу, чтобы он был подсвечен так же, как он подсвечивается при нажатии на строку

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
   ...
   [cell.textLabel setHighlighted:YES];


   return cell;
}

Ответы [ 6 ]

27 голосов
/ 23 декабря 2010

Эта строка будет обрабатывать перерисовку ячейки, метки и аксессуара для вас:

[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
21 голосов
/ 08 июля 2013

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

 [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];

Однако вы должны быть осторожны , чтобы не вызывать этот метод слишком рано.

В первый раз, когда контроллер представления, содержащий упомянутый tableView, равен initialized, самый ранний, который вы должны вызвать этот метод, находится в пределах viewDidAppear:.

Итак, вы должны сделать что-то вроде этого:

- (void)viewDidAppear:(BOOL)animated
{
   NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; // set to whatever you want to be selected first 
   [tableView selectRowAtIndexPath:indexPath animated:NO  scrollPosition:UITableViewScrollPositionNone];
}

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

15 голосов
/ 26 августа 2011
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection: 0];

[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];

обычно работает

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

(вы задаете представление, выбирая контроллер представления таблицы в окне инспектора построителя интерфейса и перетаскивая выход для «представления» в представление таблицы, в котором вы хотите сделать выбор).

3 голосов
/ 20 февраля 2013
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
   return YES;
}

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
  // do something here
}

Попробуйте это:)

2 голосов
/ 27 марта 2012

Вы можете использовать

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
   ...
   [cell.textLabel setHighlighted:YES];


   return cell;
}
1 голос
/ 23 декабря 2010

У вас есть два варианта.Либо используйте выбор табличного представления:

[tableView selectRowAtIndexPath: indexPath animated: YES scrollPosition: UITableViewScrollPositionNone];

Или измените цвет фона ячейки таблицы в делегате табличного представления:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.backgroundColor = ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...