【问题标题】:instantiateViewControllerWithIdentifier - Storyboard id set but still not workinginstantiateViewControllerWithIdentifier - 故事板 id 已设置但仍无法正常工作
【发布时间】:2013-06-13 13:17:17
【问题描述】:

我必须以编程方式创建一个 segue,但是当我单击按钮时,视图控制器不会更改为下一个,Storyboard ID 已设置但仍无法正常工作。为了完成这项工作,我是否遗漏了任何其他检查?

请看下面的代码:

EntryViewController *entryController = [self.storyboard instantiateViewControllerWithIdentifier:@"go"];
[self.navigationController pushViewController:entryController animated:YES];

它让我发疯。谢谢

【问题讨论】:

  • 'self.storyboard' 是设置还是 nil?
  • @Wain 它可能设置为 nil,因为我没有设置它,我在哪里将故事板设置为 self?

标签: ios objective-c segue


【解决方案1】:

在我的 viewDidLoad 中,我放置了调用 goldStarOpen 的按钮:

UIButton *btnTwo = [UIButton buttonWithType:UIButtonTypeCustom];
btnTwo.frame = CGRectMake(250, 20, 40, 40);
[btnTwo addTarget:self action:@selector(goldStarOpen) forControlEvents:UIControlEventTouchUpInside];
[btnTwo setImage:[UIImage imageNamed:@"GoldStar.png"] forState:UIControlStateNormal];
[self.view addSubview:btnTwo];

在 goldStarOpen 中,我的代码几乎和你的一样。

- (void)goldStarOpen
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:
                                @"MainStoryboard" bundle:[NSBundle mainBundle]];
    UIViewController *myController = [storyboard instantiateViewControllerWithIdentifier:@"GoldStar"];
    [self presentViewController:myController animated:YES completion:nil];
}

goldStarOpen 激活情节提要中的 ViewController。

您可能需要设置您尝试加载的 View Controller 的 Storyboard ID。它位于检查器中,就在您为视图控制器分配自定义类的下方。

【讨论】:

  • 我遇到了同样的问题,我通过在检查器中为类设置正确的模块解决了它(见上面的截图)。
  • 有人可以回答这个问题吗? stackoverflow.com/questions/38959445/…
【解决方案2】:

使用

 + (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil. 

所以试试这个

self.storyboard=[UIStoryboard storyboardWithName:@"Your_Story_Board_Name" bundle:[NSBundle mainBundle]];
EntryViewController *entryController = [self.storyboard instantiateViewControllerWithIdentifier:@"go"];
[self.navigationController pushViewController:entryController animated:YES];

【讨论】:

  • 我用这个答案在 AppDelegate 中实例化了 soryboard。谢谢!
【解决方案3】:

试试这个 Storyboard 选择 UIViewController-> Xcode->Editor->Embed In->Navigation Controller

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"YourStoryboard"
                                                         bundle: nil];

YourViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier: @"YourViewController"];
[self.navigationController pushViewController:vc animated:YES];

【讨论】:

    【解决方案4】:

    试试这个,

     UIStoryboard *    storyboardobj=[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    
     EntryViewController *entryController = [storyboardobj instantiateViewControllerWithIdentifier:@"go"];
    [self.navigationController pushViewController:entryController animated:YES];
    

    【讨论】:

    • 我在看另一个这样的例子,刚刚试过你的,还是没有运气!
    【解决方案5】:

    您不能设置视图控制器storyboard。它是只读的,并在创建视图控制器时设置。相反,您需要从其他地方获取情节提要或加载它。

    您可以从 AppDelegate 的根视图控制器获取故事板。或者使用+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil

    【讨论】:

    • 它没有移动到下一个视图控制器
    • 您检查了故事板是由调用“storyboardWithName:...”创建的吗?视图控制器是否为“go”标识符实例化?当前视图在导航控制器中?
    • 是的,我使用的情节提要是“mainStoryboard”注意小m!唯一的事情是我以编程方式创建我的视图,虽然我的视图控制器在我运行时嵌入在导航控制器中模拟器,顶部没有出现导航栏,你觉得这是问题吗?
    • 它没有崩溃,所以它能够找到故事板标识符,但它没有移动
    • 能否展示原始控制器的创建方式以及调试时导航控制器是否为零的代码?
    【解决方案6】:

    今天遇到了这个问题,在右侧面板上清楚地设置了 Storyboard ID,但我仍然收到警告说 VC 无法访问并且没有设置标识符。在我取消选中“从目标继承模块”的框并运行项目后修复了该问题。

    代码成功运行后,无论是否选中该框,它现在似乎都可以工作,因此它可能是一个 Xcode 错误......无论如何希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-09-13
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 2014-11-23
      • 2016-08-29
      • 1970-01-01
      相关资源
      最近更新 更多