Xcode,在哪里分配 segue 标识符

Posted

技术标签:

【中文标题】Xcode,在哪里分配 segue 标识符【英文标题】:Xcode, where to assign the segue identifier 【发布时间】:2017-02-15 16:34:41 【问题描述】:

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

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

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

我已经尝试过了,只收到了一个崩溃并出现以下错误:

Receiver() 没有segue 带有标识符“SecondViewController”

有什么想法吗?谢谢

【问题讨论】:

如果你是 Swift 初学者,你真的应该学习 Swift 3,而不是 Swift 2,并使用 Xcode 8,而不是 Xcode 7。如果你有特定的工作要做,只能使用旧工具使用那些特定的工具。 你好,因为我前段时间买的教程是使用 Swift 2,所以我正在关注它 您需要一个现代教程。您正在浪费时间学习一种过时的语言形式。 Swift 3 发生了很大变化。从 Apple 的免费书籍开始 - developer.apple.com/library/content/documentation/Swift/… 如果你是从头开始学习 Swift 3 可能会更好,但是 segue 处理程序在 v 7 和 v 8 之间没有发生巨大变化 ***.com/a/41887007/5461400 【参考方案1】:

Segue Identifier storyboard ID 相同,Storyboard ID 在您想要基于特定故事板创建视图控制器时使用-它必须是唯一的,不像segue标识符-。

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

在两个 viewController 之间添加 segue:

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

选择“显示”-例如-,输出应如下所示:

如上图,红色矩形包围的箭头为segue。

附加说明:如果您选择了“显示”选项,您必须将您的第一个视图控制器嵌入到导航控制器中(选择您的第一个视图控制器 -> 编辑器 -> 嵌入 -> 导航控制器),输出应如下所示:

因为“显示”意味着推入导航控制器堆栈。

为 segue 分配一个标识符:

选择segue,从属性检查器中您会看到“标识符”文本字段,就是这样!确保插入与performSegueWithIdentifier 中使用的名称完全相同的名称。

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


此外:

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

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

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

这将是您在情节提要中添加到 segue 的名称。

【讨论】:

对我来说,ctrl+点击从一个视图控制器到另一个视图控制器只是将第一个视图控制器移动到故事板上的第二个视图控制器。 @chodobaggins 首先,选择视图控制器本身,然后按 ctrl + 将其顶部的黄色圆圈拖动到所需的控制器。【参考方案2】:

在你的代码中

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

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

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

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

【讨论】:

【参考方案3】:

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

    在主故事板视图中选择 segue 链接

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

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

【讨论】:

【参考方案4】:

当您将视图控制器链接到情节提要中的另一个视图控制器时,您需要在它们之间的链接中分配一个 segue 标识符,即“SecondViewController”,只有这样您的代码才能工作。

或者,您也可以使用 self.storyboard.instantiateViewControllerWithIdentifier("//storyboard id of that view controller") 通过 storyboard id 显示另一个视图控制器,然后使用 present/show 视图控制器。

【讨论】:

【参考方案5】:

你可以像这样启动viewController:

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

【讨论】:

以上是关于Xcode,在哪里分配 segue 标识符的主要内容,如果未能解决你的问题,请参考以下文章

CSStickyHeaderFlowLayout swift接收器没有标识符的segue

Xcode segue 有时会导致后屏

我无法向 segues 添加标识符。有没有办法修复 ios xamarin 故事板?

Xcode interface Builder 没有给我选择在哪里放置 UITableViewCell 的重用标识符

即使不满足标识符,Segue 也会执行

有没有办法在 Xcode Storyboard 属性检查器中使用 plist 文件字符串?