我是 IOS 开发新手,最近开始使用 Xcode 4.5。我看到每个 viewController 都可以设置一些身份变量,包括情节提要 ID。这是什么,我该如何使用它?
https://i.stack.imgur.com/Sidrj.png
我开始在 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”的情节提要 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)
要添加到 Eric 的答案并为 Xcode 8 和 Swift 3 更新它:
故事板 ID 完全符合其名称的含义:它标识。只是它在故事板文件中标识了一个视图控制器。故事板就是这样知道哪个视图控制器是哪个。
现在,不要被这个名字所迷惑。故事板 ID 不能识别“故事板”。根据 Apple 的文档,故事板“代表应用程序用户界面的全部或部分的视图控制器”。所以,当你有类似下图的东西时,你有一个名为 Main.storyboard 的故事板,它有两个视图控制器,每个控制器都可以被赋予一个故事板 ID(它们在故事板中的 ID)。
https://i.stack.imgur.com/V4Ilo.png
您可以使用视图控制器的故事板 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
self.storyboard
可以从任何从情节提要加载的视图控制器访问。如果视图控制器不是从情节提要中加载的,则该属性为零。