Xcode,在哪里分配segue标识符

Xcode, where to assign the segue identifier

请原谅我的初学者问题。 我知道我可以像这样切换到另一个屏幕 (ViewController)

self.performSegueWithIdentifier ("SecondViewController", sender: self)

但我似乎找不到在哪里为我的第二个屏幕分配 ID,我只是找到 Storyboard ID,是吗?

我已经尝试过,只收到以下错误的崩溃:

Receiver () has no segue with identifier 'SecondViewController'

有什么想法吗?谢谢

当你 link 一个视图控制器到故事板中的另一个视图控制器时,在它们之间的 link 你需要分配一个 segue 标识符,即 "SecondViewController" 只有这样你的代码才会工作。

或者,您也可以使用 self.storyboard.instantiateViewControllerWithIdentifier("//那个视图控制器的故事板 ID") 通过故事板 ID 显示另一个视图控制器,然后使用 present/show 视图控制器。

Segue Identifier notstoryboard ID 相同,storyboard ID used when you想要基于那个特定的故事板创建一个视图控制器 - 它必须是唯一的,与 segue 标识符不同 -

如果你已经知道如何创建segue,你可以跳过这部分。

在两个 viewController 之间添加一个 segue:

在 Interface Builder 中,按下 ctrl 并在您想要 link 的两个视图控制器之间拖动(确保您从视图控制器拖动本身,而不是它的主要观点)。你应该看到:

选择 "Show" -例如-,输出应如下所示:

如上图,红色矩形框内的箭头就是segue。

补充说明:如果您select编辑了"Show"选项,您必须将您的第一个视图控制器嵌入导航控制器(select 你的第一个 viewController -> Editor -> Embed In -> Navigation Controller),输出应该是这样的:

因为 "Show" 意味着推入导航控制器堆栈。

正在为 segue 分配标识符:

Select segue,从属性检查器你会看到 "Identifier" 文本字段,就是这样!确保插入与 performSegueWithIdentifier.

中使用的名称完全相同的名称

如果你不知道在哪里可以找到属性检查器,它在右上角看起来像:


此外:

要从一个 View Controller 添加 multiple segues,请遵循相同的过程(ctrl + 从第一个控制器拖动到彼此的 View控制器),输出应如下所示:

在这种情况下,您可能会遇到如何识别执行了哪个segue的问题,覆盖prepare(for:sender:)方法是解决方案,您可以根据segue进行检查identifier 属性:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "firstSegueIdentifier") {
        // ...
    } else if (segue.identifier == "secondSegueIdentifier") {
        //...
    }
}

这将是您在故事板中添加到 segue 的名称。

在你的代码中

self.performSegueWithIdentifier ("SecondViewController", sender: self)

字符串 "SecondViewController" 看起来像故事板 ID。在同一个地方你必须写 segue identifier ,而不是 storyboard id 。

按照屏幕截图并通过单击右上栏字段上的 segue 来分配 segue 标识符名称。你可以这样做

self.performSegueWithIdentifier ("WriteSegueIdentifierName", sender: self)

您可以像这样启动 viewController:

let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Login")
self.present(viewController, animated: false, completion: nil)

与提供的答案类似,这是 Xcode 12 中的样子:

  1. Select 主情节提要视图中的转场 link

  1. 导航到属性检查器并添加标识符(如果不存在)

  1. 将标识符添加到您的代码中。完成!