2013-11-28 70 views
0

我通过使用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

你通过你的标签栏控制器访问它。从嵌入到标签栏控制器的任何控制器,你可以得到这样的引用:

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]; 
+0

嗨,我已经遵循这种方法来访问视图控制器,但奇怪的是我不能改变从视图控制器的视图(不反映在模拟器上)是否有任何额外的步骤我需要执行? – Bob

+0

@Bob,可能是因为控制器视图尚未加载。当实例化标签栏控制器时,其所有内容控制器也会实例化,但只有第一个选项卡中的控制器调用了其viewDidLoad。您可以将数据传递给控制器​​#5,并使其在viewDidLoad或viewDidAppear中更改其视图。 – rdelmar

+0

@Bob,我编辑了我的答案,向您展示我的意思是传递数据。 – rdelmar

0

不要呈现您的视图控制器,因为您的视图控制器已经是您的tabbar的一部分。因此,使用下面的代码来实现:

[self.tabBarController setSelectedIndex:yourIndex]; 

您的代码会是这样的:

UIViewController *controller = self.tabBarController.viewControllers[4]; 
[controller setFields:PFLogInFieldsFacebook | PFLogInFieldsDefault]; 
[self.tabBarController setSelectedIndex:4]; 

享受:)

+0

喜它看起来很有希望,但是当我尝试这个“视图”没有更新。正如你可以看到我试图在“PFLogInFieldsFacebook”字段中添加“视图”,但该字段未显示。 (是否有任何想法,为什么会发生这种情况? – Bob

0

从苹果文档 关于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.

+0

嗨,我想我已经用“loginviewcontroller”标记了它。 – Bob

+0

你不能将NSString(“loginviewcontroller”)赋值给一个标记(NSInteger)的值 – Dinesh

+0

嗨,我很困惑,它说“用适当的标识符字符串标记它”,但为什么我要给它一个NSInteger值呢? – Bob

相关问题