使用 Storyboard id iOS 以编程方式调用视图控制器

Posted

技术标签:

【中文标题】使用 Storyboard id iOS 以编程方式调用视图控制器【英文标题】:Call a view controller programatically using storyboard id iOS 【发布时间】:2017-05-17 10:48:04 【问题描述】:

我想要什么?

MainViewController 中,我以编程方式从xib 打开一个视图。这 xib 视图包含UIButton。 xib 成功打开。 点击那个UIButton我想移动FeedBackViewController

我的代码

这是我用来在点击UIButton 时移动FeedBackViewController 的代码

FeedBackViewController *view=[self.storyboad instantiateViewControllerWithIdentifier:@"FeedBackView"];
[self presentViewController:view animated:YES completion:nil];

但它正在崩溃,我收到以下消息:

由于未捕获的异常“NSInvalidARgumentException”而终止应用程序,原因:“应用程序试图在目标 FutureOrderViewController:0x199a4a30 上呈现一个 nil 模式视图控制器。

【问题讨论】:

你确定你的VC使用的是XIB还是storyboard FeedBackViewController 在故事板中? 【参考方案1】:

检查这些东西

检查视图控制器的标识符,如果它与您在情节提要中提到的相同

确保您的视图对象不为零。在该行和底部的调试区域设置断点,查看对象是否不为零。如果为 nil,则问题出在情节提要连接上

如果您当前的视图控制器不是从情节提要启动的,则获取情节提要对象,如下所示:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController * feedbackVC = [storyboard   instantiateViewControllerWithIdentifier:@"FeedBackView"] ;
[self presentViewController:feedbackVC animated:YES completion:nil];

【讨论】:

【参考方案2】:

每当您想按照您提到的方式加载 VC 时,您需要做两件事。

事物 1: 特定的故事板 ID。你会发现这个:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Your_Storyboard_Id" bundle:nil];

在我的情况下,这是 主要

事情 2:

您需要您的视图控制器 ID。只需单击您要从情节提要中转到的 View Controller 并在此处指定合适的名称。

然后像这样调用:

UIViewController * yourVC = [storyboard   
instantiateViewControllerWithIdentifier:@"YourVC_ID"] ;

如果您想以模态方式呈现它,您已经这样做了。 :)

[self presentViewController:yourVC animated:YES completion:nil];

【讨论】:

【参考方案3】:

试试这个

UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
FeedBackViewController * feedbackVC = [story   instantiateViewControllerWithIdentifier:@"FeedBackView"] ;
[self presentViewController:feedbackVC animated:YES completion:nil];

FeedBackView 是您的 FeedBackViewController 的故事板 ID。

【讨论】:

以上是关于使用 Storyboard id iOS 以编程方式调用视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

iOS 编程将 Storyboard 转换为 NIB

有没有办法以编程方式为 iOS 上的 3rd 方应用程序获取 UI 层次结构?

iOS - 以编程方式创建今日小部件扩展

如何使用 Storyboard 以编程方式添加动作

使用swift iOS8通过代码将约束设置到Storyboard中的元素

基于在 Storyboard 中使用自动布局创建的另一个视图,以编程方式使用框架创建视图