![](/img/trans.png)
[英]How do I ensure Core Data retrieval between switching tabs on a tab bar controller?
[英]How do I pass data from a tab bar controller to one of its tabs?
我在故事板中设置了UITabBarController。 我想从选项卡栏控制器传递数据字典,以便在相应的子选项卡中使用,该选项卡是标准的UIViewController。
这似乎是一个很长的问题要回答,但我真的不知道从哪里开始。 我正在寻找最简单的方法。 我必须以编程方式使标签功能化吗? 指向我任何有用的开发人员文档也将非常感谢。
-Austin
ps我是新手,到目前为止依赖于storyboard转换的故事板
花了几天时间,但我发现了一个简单的解决方案。 在我的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];
然后在您的子选项卡ViewController中,您将“收听”该通知。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNotification:)
name:@"Some_Notification_Name"
object:nil];
- (void)handleNotification:(id)object {
// Use your NSDictionary object here.
}
如果您将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];
使用Swift
如果您将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
使用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
}
}
有这个工作......
我有3个视图控制器,我必须将数组从一个传递到另一个..
这就是我做的
将数据附加到Tab View Controller之一
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"];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.