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

时间:2017-05-17 10:48:04

标签: ios objective-c xib

我想要什么?

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

我的代码

  • 这是我用来点击FeedBackViewController

    时移动UIButton的代码
    FeedBackViewController *view=[self.storyboad instantiateViewControllerWithIdentifier:@"FeedBackView"];
    [self presentViewController:view animated:YES completion:nil];
    

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

  

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

3 个答案:

答案 0 :(得分:4)

检查这些事情

检查viewcontroller的标识符,如果它与您在storyboard中提到的相同

enter image description here

确保您的视图对象不是nil。在该行上设置断点,在底部的调试区域上查看对象是否为nil。如果它是零则问题在于故事板连接

如果你的当前viewcontroller没有从storyboard启动,那么得到这样的storyboard对象:

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

答案 1 :(得分:0)

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

事情1:具体的故事板ID。你会发现:

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

在我的情况下,这是主要 enter image description here

事2:

您需要View Controller ID。只需单击要从故事板中查看的View Controller,然后在那里提供一个合适的名称。

enter image description here

然后调用它:

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

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

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

答案 2 :(得分:0)

试试这个

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

FeedBackView 是FeedBackViewController的故事板ID。