2010-10-29 2 views
0

У меня есть UISplitViewController с табличным представлением для навигации. Это похоже на приложение Mail. Когда вы нажимаете на представление таблицы в портретном режиме, всплывающее окно скрывается. Когда вы нажимаете на навигационную панель, чтобы получить всплывающее окно, выбранный элемент больше не отображается. Как сделать этот элемент выбранным без повторного выбора элемента? (Так же, как в почтовом приложении)UITable cell selection в SplitViewController

ответ

0

У меня есть решение, которое работает, но это расстраивает хакки. Мне нужно дважды вызвать selectRowAtIndexPath. Кажется, что cellForRowAtIndexPath отменяет выбор, сделанный в viewWillAppear. Тем не менее, его все еще нужно вызвать в viewDidAppear, так что представление прокручивается до правильной позиции до вызова cellForRowAtIndexPath.

- (void)viewWillDisappear:(BOOL)animated 
{ 
    NSIndexPath *selected = [self.tableView indexPathForSelectedRow]; 
    _selectedRow = selected.row; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_selectedRow inSection:0]; 
    [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //initialize cell code here... 

    if (indexPath.row == _selectedRow) { 
     [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle]; 
    } 
} 
0

Есть ли у вас какие-либо изменения

[tableView deselectRowAtIndexPath:indexPath animated:YES]; 

в вашем didSelectRowAtIndexPath в RootViewController?

+0

Нет. Это не называется где-либо, насколько я могу судить, но он ведет себя так, как будто это так. Когда я вызываю selectCellAtIndexPath в viewDidAppear или cell.selected = YES, он немедленно отменяется. Вы знаете, где это можно назвать? – rob

0

Для вашего контроллера табличного вида вызывается -viewWillAppear:, прежде чем появится всплывающее окно? Если да, то вы могли бы написать это как так:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [self.tableView selectRowAtIndexPath:<indexPath> 
           animated:animated 
          scrollPosition:UITableViewScrollPositionMiddle]; 

    [super viewWillAppear:animated]; 
} 

Очевидно, что заменить <indexPath> с правильным индексом пути и установить позицию прокрутки, как вы хотите. Вы также можете передать NO вместо animated, чтобы он выглядел так, как будто он был выбран до появления представления.

+0

Это не сработало. Что-то отменяет элементы tableview после вызова видаDidAppear. – rob

1

В вашем методе viewDidLoad, вы называете

self.clearsSelectionOnViewWillAppear = NO;?

Вот как это делает шаблон SplitView Xcode.

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