Сбой selectRowAtIndexPath при отображении viewWillAppear

#ios #ipad #uitableview #uipopovercontroller

#iOS #iPad #uitableview #uipopovercontroller

Вопрос:

У меня есть меню, которое UITableview находится в a 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] before и after и иметь код в viewDidAppear … ничего не работает

Комментарии:

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

Ответ №1:

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

}
  

Ответ №2:

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

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

Разница заключалась в отключении выхода view и последующем повторном подключении его к tableview. Не уверен, почему это имело значение? Я попытался добавить контроллер представления в перо, но это не имело никакого значения, поэтому его удаление и повторное подключение представления к tableview внезапно дали результаты. Вуду.