Ios 如何修改脚本创建的视图控制器?

Ios 如何修改脚本创建的视图控制器?,ios,uiviewcontroller,storyboard,Ios,Uiviewcontroller,Storyboard,我已经在Xcode 5中创建了一个选项卡式应用程序,通过使用带有5个不同选项卡的故事板 现在我想访问第五个视图控制器以实际修改一些字段,因此我想访问由情节提要自动创建的视图控制器 我给了视图控制器一个标识符,在我的viewDidLoad方法中,我使用了以下代码 UIStoryboard *mainStoryboard = [self storyboard]; ProfileViewController *controller = [mainStoryboard instantiateViewCo

我已经在Xcode 5中创建了一个选项卡式应用程序,通过使用带有5个不同选项卡的故事板

现在我想访问第五个视图控制器以实际修改一些字段,因此我想访问由情节提要自动创建的视图控制器

我给了视图控制器一个标识符,在我的viewDidLoad方法中,我使用了以下代码

UIStoryboard *mainStoryboard = [self storyboard];
ProfileViewController *controller = [mainStoryboard instantiateViewControllerWithIdentifier: @"loginviewcontroller"];
[controller setFields:PFLogInFieldsFacebook | PFLogInFieldsDefault];
[self presentViewController:controller animated:YES completion:nil];
但是很明显,一个新的视图控制器被创建并显示在原始视图控制器实例的顶部,该实例由脚本自动创建,并且选项卡栏导航也消失了


如何自动访问脚本创建的视图控制器,或者这是错误的方法?如果这是错误的方法,我该如何完成此任务?

不要显示视图控制器,因为视图控制器已经是选项卡栏的一部分。因此,请使用以下代码选择它:

[self.tabBarController setSelectedIndex:yourIndex];
您的代码如下所示:

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

享受:

您可以通过选项卡栏控制器访问它。从选项卡栏控制器中嵌入的任何控制器,您都可以获得如下参考:

UIViewController *controller = self.tabBarController.viewControllers[4];
[controller setFields:PFLogInFieldsFacebook | PFLogInFieldsDefault];
[self.tabBarController setSelectedIndex:4];
UIViewController *controller = self.tabBarController.viewControllers[4];
要设置字段,而不是尝试从另一个控制器设置字段,只需传递5控制器自己进行设置所需的数据。由于5的视图在第一次查看之前不会被加载,因此不能从其他控制器修改其视图。因此,在ProfileViewController中,创建和integer属性,让我们调用它fieldValues,并将数据传递给它。在要传递信息的控制器中:

ProfileViewController *controller = self.tabBarController.viewControllers[4];
controller.fieldValues = PFLogInFieldsFacebook | PFLogInFieldsDefault;
然后在ProfileViewController的viewDiLoad中,执行以下操作:

[self setFields:self.fieldValue];
来自Apple文档 关于实例化eViewController标识符:


使用此方法可以创建要在应用程序中以编程方式操作和显示的视图控制器对象。在使用此方法检索视图控制器之前,必须在Interface Builder中使用适当的标识符字符串对其进行显式标记。

您不能将标记NSStringloginviewcontroller指定给标记NSInteger值。我很困惑,它说使用适当的标识符字符串对其进行标记,但是为什么我要给它一个NSInteger值呢?嗨,我按照这种方法访问视图控制器,但奇怪的是,我无法从该视图控制器更改视图。没有反映在模拟器上。有什么额外的步骤需要执行吗?@Bob,可能是因为控制器视图还没有加载。实例化选项卡栏控制器时,其所有内容控制器也会实例化,但只有第一个选项卡中的控制器才调用其viewDidLoad。您可以将数据传递给控制器5,并让它在viewDidLoad或ViewDidDisplay中更改其视图。@Bob,我已编辑了我的答案,以向您说明传递数据的含义。我尝试了上面的代码,但它给出了错误消息,即在“ProfileViewController*”类型的对象上找不到属性“fieldValue”。但是,我将两行代码ProfileViewController*controller=self.tabBarController.viewControllers[4];[控制器设置字段:pfloginfieldsfault];在我的第一个选项卡的ViewDidLoad方法下,它只是工作——它更改了我的第五个选项卡视图的字段。知道为什么会这样吗?PS:正如您可能注意到的,我正在使用解析框架。@Bob,您之所以出现此错误,是因为您没有将该属性添加到ProfileViewController的.h文件中。我不熟悉解析,但必须是字段只是控制器的一个属性,所以您可以从外部设置它,也就是说,它不是设置UI元素的值,而是一个属性,这就是我试图对我的答案所做的。您好,它看起来很有希望,但当我尝试此操作时,视图没有更新。如您所见,我正在尝试将PFLogInFieldsFacebook字段添加到视图中,但该字段未显示:你知道为什么会这样吗?