Answers:
情节提要ID是一个String字段,可用于基于该情节提要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”的故事板ViewController创建一个MyCustomViewController,并将其显示在当前View Controller上方
如果您在应用程序委托中,则可以使用
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle: nil];
编辑:斯威夫特
@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)
}
和
let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)
self.storyboard
可以从故事板加载的任何视图控制器中进行访问。如果不是从情节提要中加载视图控制器,则该属性为nil。
要添加到Eric的答案并针对Xcode 8和Swift 3进行更新:
情节提要ID确实符合其名称的含义:它可以标识。只是它可以识别情节提要文件中的视图控制器。情节提要通过这种方式知道哪个视图控制器是哪个。
现在,不要被名字弄糊涂了。故事板ID不能标识“故事板”。根据Apple的文档,情节提要“代表了应用程序全部或部分用户界面的视图控制器”。因此,当您具有下图所示的内容时,您将有一个名为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)
}
请注意语法的更改。
self.storyboard