使用 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 上的 3rd 方应用程序获取 UI 层次结构?