Ошибка selectRowAtIndexPath в viewWillAppear - PullRequest
1 голос
/ 29 сентября 2011

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

Работает отлично.

Проблемаесли вы используете 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 ...ничего не работает

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

попробуйте позвонить [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

}
0 голосов
/ 29 сентября 2011

Теперь работает!

- (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];
}

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

...