我有一个在故事板中设置的UITabBarController。我想从标签栏控制器传递一个数据字典,用于相应的子标签页,这是一个标准的UIViewController。如何将数据从标签栏控制器传递到其标签之一?
这似乎是一个很长的问题要回答,但我真的不知道从哪里开始。我正在寻找通过这个最简单的方法。我必须让这些选项卡以编程方式工作吗?指向我的任何有用的开发人员文档也将不胜感激。
-Austin
p.s.我是新的,迄今为止依赖于故事板的视图控制器转换
我有一个在故事板中设置的UITabBarController。我想从标签栏控制器传递一个数据字典,用于相应的子标签页,这是一个标准的UIViewController。如何将数据从标签栏控制器传递到其标签之一?
这似乎是一个很长的问题要回答,但我真的不知道从哪里开始。我正在寻找通过这个最简单的方法。我必须让这些选项卡以编程方式工作吗?指向我的任何有用的开发人员文档也将不胜感激。
-Austin
p.s.我是新的,迄今为止依赖于故事板的视图控制器转换
花了几天时间,但我发现了一个简单的解决方案。在我的TabBarController的viewDidLoad方法,我可以访问和使用
[[self viewControllers] objectAtIndex:0]
或任何索引要访问我的设置选项卡式子视图的属性。
保存作为我的tab1_viewController的一个实例给我一个指向对象的指针,从中我可以获取并设置我的属性值。这最初是不清楚的,因为storyboard为我创建了tab_viewController对象。我从来没有机会按照我想要的方式初始化它们!
你最好的选择是使用通知。
在你的标签栏,你可以这样做:
NSDictionary *myDictionary; // Populate this with your data.
// Fire the notification along with your NSDictionary object.
[[NSNotificationCenter defaultCenter] postNotificationName:@"Some_Notification_Name"
object:myDictionary];
然后在你的孩子标签视图控制器,你会“监听”该通知。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNotification:)
name:@"Some_Notification_Name"
object:nil];
- (void)handleNotification:(id)object {
// Use your NSDictionary object here.
}
我无法正常工作。我试着把tabBarController代码放在它的viewDidLoad和tabBarController:didSelectViewController中,两者都没有成功。我把子代码放在viewDidLoad – austin
得到这个工作...
我有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"];
如果你有一个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];
使用斯威夫特
如果你有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
随着斯威夫特:
if let navController = self.tabBarController?.viewControllers?[1] as? UINavigationController{
if let testController = navController.childViewControllers.first as? MyViewController{
testController.data = data
self.tabBarController?.selectedIndex = 1
}
}
我无法解析此。你如何在UITabBarController中存储数据?你在继承UITabBarController吗?标签栏控制器实际上只是一个用于控制视图控制器的元控制器。在Apple的MVC框架中,应该使用视图控制器将模型数据绑定到视图。如果您需要以复杂的方式在视图控制器之间共享数据,那么您可以使用通知,创建单例,将数据存储在应用程序委托中,或使用共享的外部存储(如CoreData)。 –
杰夫,所以具体而言,我将数据传递给UITabBarController,但我不明白如何将数据分发到单独的选项卡式视图控制器 – austin