【问题标题】: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。

这是故事板的样子:

【问题讨论】:

    标签: ios iphone objective-c xcode storyboard


    【解决方案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。
      • 我将如何清除堆栈然后创建一个新视图,因为我想避免视图留在内存中/在堆栈中有重复的控制器。
      猜你喜欢
      • 2012-06-10
      • 2021-08-05
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      相关资源
      最近更新 更多