故事板视图控制器未实例化?

Posted

技术标签:

【中文标题】故事板视图控制器未实例化?【英文标题】:Storyboard View Controller not instantiated? 【发布时间】:2014-04-18 20:29:39 【问题描述】:

我正在尝试使用此代码在我的情节提要中实例化一个新的视图控制器,但它什么也不做,并且停留在旧情节提要上。

代码如下:

(void)menuSelect:(id)sender 
UIButton *button = (UIButton*) sender;
switch (button.tag) 
    case 0: 
        HomeViewController *hc=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"Home"];
        [self presentViewController:hc animated:YES completion:nil];

        break;
    

故事板文件名为 Main.Storyboard,viewController 的 id 为 Profile。

这是故事板的样子:

【问题讨论】:

【参考方案1】:

问题

您将“home”作为HomeViewController 的标识符传递,而它是“profile”。所以你要告诉编程的是:获取名称为“main”的storyboard,实例化标识符为“home”的HomeViewController

解决方案

将代码改为:

HomeViewController *hc=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"Profile"];
[self presentViewController:hc animated:YES completion:nil];

【讨论】:

【参考方案2】:

实例化情节提要不会导致显示任何视图控制器。您必须从另一个视图控制器调用 presentViewController。

【讨论】:

好的,谢谢,我需要做一些特别的事情来删除以前的屏幕,是推到顶部还是只是重新创建一个新视图,因为我想摆脱旧视图如有必要。 @Lion789 它没有替换呈现它的 ViewController,它被添加到堆栈中。您可以通过当前可见屏幕的presentingViewController 属性访问正在呈现的ViewController。同样,您可以通过 presentViewController 属性通过前一个 ViewController 访问呈现的 ViewController。 我将如何清除堆栈然后创建一个新视图,因为我想避免视图留在内存中/在堆栈中有重复的控制器。

以上是关于故事板视图控制器未实例化?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用没有选项卡或导航控制器的故事板从 AppDelegate 实例化不同的视图?

运行时错误消息:loadView 使用来自故事板 Main 的标识符 ViewController 实例化视图控制器,但没有获得 TableView

故事板中视图控制器之间的共享实例

返回故事板当前视图控制器标识符

如何使用给定的根视图控制器和初始视图控制器实例化情节提要?

故事板崩溃 - 编码兼容的关键场景视图控制器