在实例化 ViewController 之前更改/修改运行时用户定义的属性

Posted

技术标签:

【中文标题】在实例化 ViewController 之前更改/修改运行时用户定义的属性【英文标题】:Change/Modify Runtime User defined attribute before Instantiating ViewController 【发布时间】:2014-01-02 09:22:54 【问题描述】:

简而言之,我想知道“如何在实例化视图控制器之前更改运行时用户定义的属性”我为什么需要这个 我正在创建一个使用多个故事板的应用程序。我有一个主情节提要,其中一个 UIViewController 被指定为 LinkViewController。它有一个字符串属性,告诉它必须链接哪个故事板。现在我想做的是,我想在 appDelegate 更改该属性,然后实例化 viewController。至今无能为力。

这就是我正在做的:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];         
EffLinkHomeVC *rootController = [storyboard instantiateViewControllerWithIdentifier:@"linkView"];
 rootController.storyBoardName = @"wxyzForiPhone";
 self.window.rootViewController = rootController;

我找到了其他几种解决方法。但我只想更清楚地了解更改“运行时用户定义的属性”。谢谢你们。 :)

【问题讨论】:

意思是你想改变你应用的rootViewController? 不……我只是用自定义视图控制器启动应用程序 storyBoardName 是您的 EffLinkHomeVC 上的自定义 NSString* 属性还是什么? 是的.. 仅限自定义 NSString*。 它会如何处理实例化后无法执行的属性? 【参考方案1】:

据我所知,您只能使用 nib 中可用的代理/外部对象来执行此操作。 检查答案 here 以查看其用法的一个很好的示例。

从外观上看,该功能被隐藏或从情节提要中删除。唯一记录在案的配置方式是静态的。在您的情况下,它将使用您正在使用的情节提要中的属性进行静态配置。如果这足够了,您可以使用键值机制为每个情节提要静态配置不同的值。

除此之外,您只有普通的 post init viewController 方法。

【讨论】:

这不是我所要求的,但 1 up for new concept.

以上是关于在实例化 ViewController 之前更改/修改运行时用户定义的属性的主要内容,如果未能解决你的问题,请参考以下文章

在 viewDidLoad 之前调用 ViewController 上的自定义 init 方法

如何实例化第二个 ViewController 并停止第一个 ViewController 的方法

使用 instantiateViewControllerWithIdentifier 对实例化的 ViewController 进行 Segue

在 Swift 中实例化并展示一个 viewController

从 SceneDelegate 实例化时如何获取完整的 viewController

MonoTouch 以编程方式为 ContainerView 实例化 ViewController