Ответ 1
Эта строка обработает перекраску ячейки, метки и аксессуара для вас:
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
Код ниже, кажется, не имеет никакого эффекта. Я хочу, чтобы он был высокоэластичным, так же, как он выделяется при нажатии на строку
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
...
[cell.textLabel setHighlighted:YES];
return cell;
}
Эта строка обработает перекраску ячейки, метки и аксессуара для вас:
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
Как отмечали другие, вы можете программно выбрать ячейку, используя этот метод:
[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:
или любые другие вызовы жизненного цикла раннего просмотра, это, скорее всего, не сработает или будет иметь нечетные результаты (например, прокрутка в нужную позицию, но не выбор ячейки).
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection: 0];
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
обычно работает
Если вы используете построитель интерфейсов для создания интерфейса, нужно проверить, что вы указали представление контроллера табличного представления. Если вы фактически не указываете представление, это сообщение выбора может идти никуда.
(вы указываете представление, выбирая контроллер табличного представления в окне инспектора интерфейса и перетаскивая розетку для "просмотра" в вид таблицы, в который вы хотите сделать выбор).
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
// do something here
}
Попробуйте следующее:)
Вы можете использовать
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
...
[cell.textLabel setHighlighted:YES];
return cell;
}
У вас есть два варианта. Либо используйте вид таблицы:
[tableView selectRowAtIndexPath: indexPath animated: YES scrollPosition: UITableViewScrollPositionNone];
Или измените цвет фона ячейки таблицы в делегате представления таблицы:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = ...
}