Question

I have a UITabBarController as part of my app delegate and I want to trap when the user touches a specific tab (the favourites) and force the table within it to reload the data.

What would be best practice in this instance?

I have added the UITabBarDelegate protocol to my app delegate and implemented the didSelectViewController method. So far so good. Within the method I get a viewController, so I can check its title, etc. to determine which tab is selected.

How can I then send a reloadData message to the UITableView in the viewController? I tried creating a method in my FavouritesViewController class and calling that but it does not work.

Example code:

#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];
      }
   }
} 
Was it helpful?

Solution

It sounds like you need to add a [UITableView reloadData] to the tableViewController's viewWillDisplay method. This will cause the table to reload every time it is displayed.

If you want to force a reload will the tableview is already displayed, then calling reload from the method you created in the OP should work.

OTHER TIPS

The following piece of code should refresh your table every single time the view appears.

-(void)viewWillAppear:(BOOL)animated
{
    [[self tableView] reloadData];
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top