Xcode 什么是故事板ID?我如何使用它?

Xcode 什么是故事板ID?我如何使用它?,xcode,storyboard,interface-builder,Xcode,Storyboard,Interface Builder,我是IOS开发新手,最近开始使用Xcode 4.5。我看到每个viewController都可以设置一些标识变量,包括故事板ID。这是什么,我如何使用它 我开始搜索stackoverflow,但找不到任何解释 我以为这不只是一些愚蠢的标签,我可以设置记住我的控制器,对吗?它的作用是什么?序列图像板ID是一个字符串字段,可用于基于该序列图像板ViewController创建新的ViewController。使用任何ViewController都是一个示例: //Maybe make a butt

我是IOS开发新手,最近开始使用Xcode 4.5。我看到每个viewController都可以设置一些标识变量,包括故事板ID。这是什么,我如何使用它

我开始搜索stackoverflow,但找不到任何解释


我以为这不只是一些愚蠢的标签,我可以设置记住我的控制器,对吗?它的作用是什么?

序列图像板ID是一个字符串字段,可用于基于该序列图像板ViewController创建新的ViewController。使用任何ViewController都是一个示例:

//Maybe make a button that when clicked calls this method

- (IBAction)buttonPressed:(id)sender
{
    MyCustomViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

   [self presentViewController:vc animated:YES completion:nil];
}
这将基于名为“MyViewController”的情节提要视图控制器创建MyCustomViewController,并将其显示在当前视图控制器的上方

如果你在应用程序中,你可以使用

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                         bundle: nil];
编辑:Swift

@IBAction func buttonPressed(sender: AnyObject) {
    let vc = storyboard?.instantiateViewControllerWithIdentifier("MyViewController") as MyCustomViewController
    presentViewController(vc, animated: true, completion: nil)
}
编辑Swift>=3:

@IBAction func buttonPressed(sender: Any) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}


要添加到Eric的答案中并针对Xcode 8和Swift 3进行更新,请执行以下操作:

故事板ID与名称的含义完全相同:它标识。只是它在情节提要文件中标识了一个视图控制器。故事板是如何知道哪个视图控制器是哪个的

现在,不要被名字弄糊涂了。情节提要ID不能识别“情节提要”。根据苹果的文档,情节提要“代表应用程序全部或部分用户界面的视图控制器”。因此,当你有如下图所示的内容时,你就有了一个名为Main.storyboard的情节提要,它有两个视图控制器,每个视图控制器都可以有一个情节提要ID(它们在情节提要中的ID)

您可以使用视图控制器的情节提要ID来实例化并返回该视图控制器。然后,您可以继续操作并以您想要的方式呈现它。要使用Eric的示例,假设您想在按下按钮时显示标识符为“MyViewController”的视图控制器,您可以这样做:

@IBAction func buttonPressed(sender: Any) {
    // Here is where we create an instance of our view controller. instantiateViewController(withIdentifier:) will create an instance of the view controller every time it is called. That means you could create another instance when another button is pressed, for example.
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

请注意语法的更改。

让我们试试看,如何从任何viewcontroller访问
self.storyboard
self.storyboard。我现在将编辑我的答案,以便您可以查看,如果需要从我的AppDelegate或任何其他类访问它,该怎么办?添加了另一个显示如何从任何文件访问情节提要的编辑。
self。可以从从从情节提要加载的任何视图控制器访问情节提要。如果视图控制器不是从情节提要加载的,则该属性为零。黄色警告图标表示由于第二个视图控制器没有入口点和/或ID。这可以通过为其提供情节提要ID或将其连接到情节提要中的另一个视图控制器来解决。这样,故事板就知道如何访问和识别它。我找不到故事板ID字段,所以谢谢你的图片。它在Xcode 9上的位置相同。
@IBAction func buttonPressed(sender: Any) {
    // Here is where we create an instance of our view controller. instantiateViewController(withIdentifier:) will create an instance of the view controller every time it is called. That means you could create another instance when another button is pressed, for example.
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}