How do I pass data from a tab bar controller to one of its tabs?

后端 未结 6 766
滥情空心
滥情空心 2021-02-02 09:21

I have a UITabBarController set up in storyboard. I want to pass a dictionary of data from the tab bar controller for use in the appropriate child tab, which is a standard UIVie

相关标签:
6条回答
  • 2021-02-02 10:01

    If you got an UINavigationController as one of your UITabBarController view controllers, you can do the following:

    NSArray *viewControllers = [self.tabBarController viewControllers];
    UINavigationController *myNavController = (UINavigationController *)viewControllers[2];
    MyViewController *myController = [[myNavController childViewControllers] firstObject];
    // Remember to alloc/init objects first if the objects haven't been initialized already.
    [myController.whateverArray = [[NSArray alloc] initWithArray:@[@"Example1", @"Example2"]];
    [self.tabBarController setSelectedIndex:2];
    
    0 讨论(0)
  • 2021-02-02 10:08

    Your best bet is to use notifications.

    In your tab bar, you would do this:

    NSDictionary *myDictionary; // Populate this with your data.
    
    // Fire the notification along with your NSDictionary object.
    [[NSNotificationCenter defaultCenter] postNotificationName:@"Some_Notification_Name" 
                                                        object:myDictionary];        
    

    Then in your child tab ViewController, you would "listen" for that notification.

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(handleNotification:) 
                                                 name:@"Some_Notification_Name" 
                                               object:nil];
    
    - (void)handleNotification:(id)object {
      // Use your NSDictionary object here.
    }
    
    0 讨论(0)
  • 2021-02-02 10:14

    It took a couple of days, but I discovered a simple solution. In my TabBarController's viewDidLoad method, I can access and set attributes of my the tabbed subviews using

        [[self viewControllers] objectAtIndex:0]
    

    or whatever index you wish to access.

    Saving that as an instance of my tab1_viewController gives me a pointer to the object, from which I can get and set my property values. This was initially unclear because storyboard created the tab_viewController objects for me. I never had a chance to initialize them the way I wanted to!

    0 讨论(0)
  • 2021-02-02 10:25

    Got this working...

    I have 3 view controller, I have to pass the array from one to another..

    Here is what I did

    Appending the data to one of Tab View Controller

    NSArray *viewControllers = [self.tabBarController viewControllers];
        ListViewController *listView = (ListViewController *)viewControllers[1];
        listView.myArray = self.myArray;
        [self.tabBarController setSelectedIndex:1];
    

    And after that, load the view controller, that's it

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    ListViewController *listView = (ListViewController *)[storyboard instantiateViewControllerWithIdentifier:@"IDListView"];
    
    0 讨论(0)
  • 2021-02-02 10:26

    Using Swift

    If you have UINavigationController as one of the tabs in UITabBarController, you want to get the instance of the child view controller instead of creating a new instance and push it to the navigation view controller before changing the tab view index. You can do this...

    This sample code assumes the Navigation Controller is at the first tab (index 0) and "childViewController" is embedded in the Navigation Controller.

    let viewControllers = self.tabBarController?.viewControllers
    
    let navController = viewControllers![0] as! UINavigationController
    
    let profileViewController = self.storyboard?.instantiateViewControllerWithIdentifier("childViewController") as? ProfileViewController
    
    profileViewController!.parameter1 = "Value1"
    
    profileViewController!.parameter2 = "Value2"
    
    navController.pushViewController(profileViewController!, animated: true)
    
    self.tabBarController?.selectedIndex = 0
    
    0 讨论(0)
  • 2021-02-02 10:26

    With Swift:

    if let navController = self.tabBarController?.viewControllers?[1] as? UINavigationController{
            if let testController = navController.childViewControllers.first as? MyViewController{
                testController.data = data
                self.tabBarController?.selectedIndex = 1
            }
    }
    
    0 讨论(0)
提交回复
热议问题