Как выбрать UITableViewCell по умолчанию?

Я создал UITableView и хотел бы, чтобы конкретный UITableViewCell отображался выбранным (синим) при загрузке представления.

Ответы

Ответ 1

-(void)viewWillAppear:(BOOL)animated {
    // assuming you had the table view wired to IBOutlet myTableView
    // and that you wanted to select the first item in the first section
    [myTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] 
                             animated:NO 
                       scrollPosition:UITableViewScrollPositionTop];
}

Я использую этот метод, чтобы выбрать один из двух UITableViewCells, чтобы пользователи знали, какая ячейка a UIDatePicker под таблицей будет выглядеть так. Этот метод используется Apple в приложении календаря, когда вы создаете новое событие и устанавливаете даты.

Ответ 2

Будь разумным, используя этот метод, так как выбор строки таким образом - это что-то Apple предлагает против делать, чтобы показать "выбранное" состояние.

Вместо этого рассмотрите настройку свойства ячейки accessoryType на что-то вроде UITableViewCellAccessoryCheckmark.

Ответ 3

Вы должны поместить его в viewWillAppear.

[myTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] 
                         animated:NO 
                   scrollPosition:0];

Если вы попытаетесь выбрать его в cellForRowAtIndexPath:, то он не примет требуемый стиль.

Ответ 4

Определенно следите. Я уверен, что у вас есть веская причина, но внимательно посмотрите на документ руководства по человеческому интерфейсу, который предоставляет Apple. Приложения отклоняются, чтобы не отменить выбор строк таблицы. Я бы посоветовал вам найти соответствующий раздел HIG и увидеть, что Apple предлагает любые предложения.

Ответ 5

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

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0];
    [theTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom];
}

Ответ 6

Использовать метод UITableViewCell

- (void)setSelected:(BOOL)selected animated:(BOOL)animated

Информация здесь.

Ответ 7

Иногда, когда вы не находитесь в UIViewController, у вас нет viewWillAppear, а иногда вы программно создаете UITableView.

Простым решением является реализация этого метода delegate:

- (void)tableView:(UITableView *)tableView 
        willDisplayCell:(UITableViewCell *)cell 
        forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (self.selectedIndex == indexPath.row) {
        cell.selected = YES;
    }
}

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