我使用带有5个不同标签的故事板在Xcode 5中创建了一个标签式应用程序。
现在我想访问第五个视图控制器以实际修改某些字段,所以我希望访问由故事板自动创建的视图控制器。
我给视图控制器一个标识符,在我的viewDidLoad方法中,我使用了以下代码
UIStoryboard *mainStoryboard = [self storyboard];
ProfileViewController *controller = [mainStoryboard instantiateViewControllerWithIdentifier: @"loginviewcontroller"];
[controller setFields:PFLogInFieldsFacebook | PFLogInFieldsDefault];
[self presentViewController:controller animated:YES completion:nil];
但显然创建了一个新的视图控制器并显示在原始视图控制器实例的顶部,该实例由故事板自动创建,标签栏导航也消失。
如何自动访问由故事板创建的视图控制器,或者这是错误的方法?如果这是错误的方法,我该如何完成这项任务?
答案 0 :(得分:0)
不要展示您的视图控制器,因为您的视图控制器已经是标签栏的一部分。因此,请使用以下代码选择它:
[self.tabBarController setSelectedIndex:yourIndex];
您的代码将是这样的:
UIViewController *controller = self.tabBarController.viewControllers[4];
[controller setFields:PFLogInFieldsFacebook | PFLogInFieldsDefault];
[self.tabBarController setSelectedIndex:4];
享受:)
答案 1 :(得分:0)
您可以通过标签栏控制器访问它。从标签栏控制器中嵌入的任何控制器,您都可以获得如下参考:
UIViewController *controller = self.tabBarController.viewControllers[4];
要设置字段,而不是尝试从另一个控制器设置它们,只需传递#5控制器需要自己执行的数据。由于#5的视图在第一次查看之前不会被加载,因此您无法从另一个控制器修改其视图。因此,在ProfileViewController中,创建和整数属性,让我们将其称为fieldValues,并将数据传递给它。在要传递信息的控制器中:
ProfileViewController *controller = self.tabBarController.viewControllers[4];
controller.fieldValues = PFLogInFieldsFacebook | PFLogInFieldsDefault;
然后在ProfileViewController的viewDiLoad中,执行以下操作:
[self setFields:self.fieldValue];
答案 2 :(得分:0)
来自Apple文档 关于instantiateViewControllerWithIdentifier:
You use this method to create view controller objects that you want to manipulate and present programmatically in your application. Before you can use this method to retrieve a view controller, you must explicitly tag it with an appropriate identifier string in Interface Builder.