故事板-引用AppDelegate中的ViewController

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

考虑以下场景:我有一个基于故事板的应用程序。我将ViewController对象添加到情节提要中,将该ViewController的类文件添加到项目中,并在IB标识检查器中指定新类的名称。现在,我将如何从AppDelegate编程地引用这个ViewController呢?我已经用相关的类创建了一个变量,并将其转换为IBOutlet属性,但是我看不到有任何方法能够在代码中引用新的ViewController--任何试图拖动连接的尝试--都是行不通的。

也就是说,在AppDelegate中,我可以像下面这样访问基ViewController

(MyViewController*) self.window.rootViewController

但是故事板中包含的任何其他ViewController如何?

提问于
用户回答回答于

使用在IB属性检查器中设置的标识符从情节提要实例化视图控制器:

编辑以添加示例代码:

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

MyViewController *controller = (MyViewController*)[mainStoryboard 
                    instantiateViewControllerWithIdentifier: @"<Controller ID>"];
用户回答回答于

如果你用XCode5你应该用另一种方式来做这件事。

  • 选择UIViewControllerUIStoryboard
  • Identity Inspector在右上窗格上
  • 检查Use Storyboard ID复选框
  • 将唯一的id写入Storyboard ID场域

那就写你的代码。

// Override point for customization after application launch.

if (<your implementation>) {
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" 
                                                             bundle: nil];
    YourViewController *yourController = (YourViewController *)[mainStoryboard 
      instantiateViewControllerWithIdentifier:@"YourViewControllerID"];
    self.window.rootViewController = yourController;
}

return YES;

扫码关注云+社区