Вопрос

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

Какова была бы наилучшая практика в данном случае?

Я добавил протокол UITabBarDelegate в свой делегат приложения и реализовал метод didSelectViewController.Пока все идет хорошо.В рамках метода я получаю ViewController, поэтому я могу проверить его заголовок и т.д.чтобы определить, какая вкладка выбрана.

Как я могу затем отправить сообщение reloadData в UITableView в ViewController?Я попытался создать метод в моем классе FavoritesViewController и вызвать его, но он не работает.

Пример кода:

#pragma mark UITabBarController delegate methods

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
   // If the favourites tab is pressed then reload the data
   if (viewController.title = @"Favourites")
   {
      if ([viewController respondsToSelector:@selector(reloadFavourites:)]) 
      {
         [viewController reloadFavourites];
      }
   }
} 
Это было полезно?

Решение

Похоже, вам нужно добавить [UITableView reloadData] к TableViewController viewWillDisplay способ.Это приведет к перезагрузке таблицы при каждом ее отображении.

Если вы хотите принудительно выполнить перезагрузку, если tableview уже отображается, то вызов reload из метода, который вы создали в OP, должен сработать.

Другие советы

Следующий фрагмент кода должен обновить вашу таблицу каждый раз, когда появится вид.

-(void)viewWillAppear:(BOOL)animated
{
    [[self tableView] reloadData];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top