什么是 StoryBoard ID,我该如何使用它?

Posted

技术标签:

【中文标题】什么是 StoryBoard ID,我该如何使用它?【英文标题】:What is a StoryBoard ID and how can I use this? 【发布时间】:2012-12-01 19:09:49 【问题描述】:

我是 ios 开发新手,最近开始使用 Xcode 4.5。我看到每个 viewController 都可以设置一些身份变量,包括情节提要 ID。这是什么,我该如何使用它?

我开始在 *** 上搜索,但找不到任何解释。

我认为我可以设置的不仅仅是一些愚蠢的标签来记住我的控制器,对吧?它有什么作用?

【问题讨论】:

【参考方案1】:

情节提要 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)

【讨论】:

让我们试试看,如何获得self.storyboard self.storyboard 可以从任何视图控制器访问。我现在将编辑我的答案,以便您查看 如果需要从我的 AppDelegate 或任何其他类访问它怎么办? 添加了另一个编辑,展示了如何从任何文件访问情节提要。 self.storyboard 可以从任何从故事板加载的视图控制器访问。如果视图控制器不是从情节提要中加载的,则该属性为 nil。【参考方案2】:

添加到 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)

请注意语法变化。

【讨论】:

黄色警告图标表示第二个视图控制器没有入口点和/或 ID。这可以通过给它一个故事板 ID 或将它连接到故事板中的另一个视图控制器来解决。这样,故事板就知道如何访问和识别它。 我无法找到 Storyboard ID 字段,因此感谢您提供的图片。它在 Xcode 9 上的位置相同。

以上是关于什么是 StoryBoard ID,我该如何使用它?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode Main.storyboard 不显示项目

是否可以在故 事板中获取所有Storyboard ID的列表?

如何使用 Storyboard ID 在 ViewControllers 中滑动

什么是ipc?我该如何使用它?

无法打开“Main.storyboard”。多个元素的 ID 为“Dsa-PS-aBW”

self.performSegue 找不到storyboard-segue-ID,即使它已被命名