2011-09-28 1 views
1

У меня есть меню, которое является UITableview в UIPopovercontroller, которое при выборе прокручивает UIScollView родительского представления к определенному кадру.selectRowAtIndexPath failing in viewWillAppear

Он отлично работает.

Проблема заключается в том, если вы используете PageControl для перемещения рамки необходимо обновлять выбранную строку в таблице [_delegate returnPageNumber] возвращает текущий pageControl.currentPage

Нет ошибок, NSLog сообщает правильный номер страницы:

scrollIndexPath is <NSIndexPath 0x1a3380> 2 indexes [0, 3] 

Но правильная ячейка не выделяет ... почему ????

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    //[tableView reloadData]; 
    int isPage = [_delegate returnPageNumber]; 
    NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:(isPage) inSection:0]; 
    NSLog(@"scrollIndexPath is %@",scrollIndexPath); 
    [tableView selectRowAtIndexPath:scrollIndexPath animated:NO scrollPosition:UITableViewScrollPositionNone];  
} 

Я попытался положить [tableView reloadData] до и после того, как и имеющий код в viewDidAppear ... ничего не работает

+0

Почему вы не используете -didSelectRowAtIndexPath? – CodaFi

ответ

0

сейчас работает!

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    [[self tableView] reloadData]; 

    int isPage = [_delegate returnPageNumber]; 

    NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:(isPage) inSection:0]; 
    NSLog(@"viewDidAppear scrollIndexPath is %@",scrollIndexPath); 

    [[self tableView] selectRowAtIndexPath:scrollIndexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; 
} 

Дело в том, что сделал разница отсоединением выход вида, а затем подключить его к Tableview. Не знаете, почему это изменило ситуацию? Я попытался добавить контроллер представления в наконечник, но это не имело никакого значения, поэтому удаление его и повторное подключение представления к представлению таблицы неожиданно привели к результатам. Voodoo.

2

попробуйте позвонить [super viewWillAppear] после всего остального, в viewWillAppear:

- (void)viewWillAppear:(BOOL)animated 
{ 

    NSIndexPath *selection = [self.tableView indexPathForSelectedRow]; 

    [[self tableView] reloadData];  


    if (selection) 
    { 
     [[self tableView] selectRowAtIndexPath:selection animated:NO scrollPosition:UITableViewScrollPositionNone];   
    } 

    [super viewWillAppear:animated]; //Trick is calling super last in this case. Then you can retrieve previously selected row to --> NSIndexPath *selection 

}