26

我在情节提要中设置了一个 UITabBarController 。我想从标签栏控制器传递一个数据字典,以便在适当的子标签中使用,这是一个标准的 UIViewController。

这似乎是一个很长的问题要回答,但我真的不知道从哪里开始。我正在寻找最简单的方法。我必须以编程方式使选项卡起作用吗?将我指向任何有用的开发人员文档也将不胜感激。

-Austin
ps 我是新来的,到目前为止,我一直依赖故事板进行视图控制器转换

4

6 回答 6

22

花了几天时间,但我发现了一个简单的解决方案。在我的 TabBarController 的 viewDidLoad 方法中,我可以使用

    [[self viewControllers] objectAtIndex:0]

或您希望访问的任何索引。

将其保存为我的 tab1_viewController 的实例会给我一个指向该对象的指针,我可以从中获取和设置我的属性值。这最初是不清楚的,因为故事板为我创建了 tab_viewController 对象。我从来没有机会按照我想要的方式初始化它们!

于 2012-05-25T05:11:39.370 回答
4

最好的选择是使用通知。

在您的标签栏中,您将执行以下操作:

NSDictionary *myDictionary; // Populate this with your data.

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

然后在您的子标签 ViewController 中,您将“收听”该通知。

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(handleNotification:) 
                                             name:@"Some_Notification_Name" 
                                           object:nil];

- (void)handleNotification:(id)object {
  // Use your NSDictionary object here.
}
于 2012-05-19T00:54:22.437 回答
3

如果您有一个UINavigationController作为您的UITabBarController视图控制器之一,您可以执行以下操作:

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];
于 2014-10-10T19:59:10.397 回答
1

使用斯威夫特

如果您有UINavigationController作为 中的选项卡之一UITabBarController,您希望获取子视图控制器的实例而不是创建新实例并将其推送到导航视图控制器,然后再更改选项卡视图索引。你可以这样做...

此示例代码假定导航控制器位于第一个选项卡(索引 0),并且“childViewController”嵌入在导航控制器中。

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
于 2016-08-23T00:15:30.587 回答
1

使用斯威夫特

if let navController = self.tabBarController?.viewControllers?[1] as? UINavigationController{
        if let testController = navController.childViewControllers.first as? MyViewController{
            testController.data = data
            self.tabBarController?.selectedIndex = 1
        }
}
于 2017-01-26T01:34:55.223 回答
0

得到这个工作...

我有 3 个视图控制器,我必须将数组从一个传递到另一个..

这是我所做的

将数据附加到选项卡视图控制器之一

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

之后,加载视图控制器,就是这样

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
ListViewController *listView = (ListViewController *)[storyboard instantiateViewControllerWithIdentifier:@"IDListView"];
于 2013-10-25T06:20:48.140 回答