在 swift 中调用故事板场景而不创建 segue?
Call storyboard scene without creating a segue in swift?
我创建了一个场景并尝试 link 到场景 class 并使用故事板创建一个 segue 并使用 self.performSegueWithIdentifier("SegueID", sender: self)
不管我做了什么(即清理构建) 我仍然得到同样的错误 "reason: 'Receiver () has no segue with identifier 'SegueID''"
我认为解决这个问题的最好方法是在这种情况下一起避免 segue。
那么在 swift 中有没有一种方法可以在不使用 segue 的情况下从代码中的视图调用以转换到另一个视图?
编辑
我已经尝试了所有三种方法,但无济于事。最常见的方法是在情节提要中的两个场景之间创建转场并为其命名,在我的例子中 "Details",但转场无法识别。
所以我尝试了下一种从 nib 加载它然后将该 nib 推到导航堆栈的方法,但是当编译和构建程序并单击按钮以呈现给新的视图控制器时,除了用于函数 println 执行。
并且尝试手动使用目标控制器并没有奏效。 instantiateViewControllerWithIdentifier 需要一个字符串并抱怨调用中的参数太多
您的代码不起作用,因为您需要在调用 performSegueWithIdentifier
时使用作为参数传递的特定 ID 在故事板中设置一个 segue。因此,在您的情况下,您需要创建 ID 为 "SegueID"
的 segue,因为这是您传递给该调用的字符串。
如果您不想使用情节提要来执行此操作,您仍然可以直接使用 UINavigationController
(毕竟,segue 在后台使用 UINavigationController
)。
然后你只需要手动实例化你的目标视图控制器(例如通过使用
self.storyboard.instantiateViewControllerWithIdentifier(<your vc id from the storyboard>, animated:true)
或者从笔尖加载它
init(nibName:bundle:)
然后使用
将其推送到导航堆栈
self.navigationController.pushViewController(<the formerly instantiaded vc>)
我创建了一个场景并尝试 link 到场景 class 并使用故事板创建一个 segue 并使用 self.performSegueWithIdentifier("SegueID", sender: self)
不管我做了什么(即清理构建) 我仍然得到同样的错误 "reason: 'Receiver () has no segue with identifier 'SegueID''"
我认为解决这个问题的最好方法是在这种情况下一起避免 segue。
那么在 swift 中有没有一种方法可以在不使用 segue 的情况下从代码中的视图调用以转换到另一个视图?
编辑 我已经尝试了所有三种方法,但无济于事。最常见的方法是在情节提要中的两个场景之间创建转场并为其命名,在我的例子中 "Details",但转场无法识别。
所以我尝试了下一种从 nib 加载它然后将该 nib 推到导航堆栈的方法,但是当编译和构建程序并单击按钮以呈现给新的视图控制器时,除了用于函数 println 执行。
并且尝试手动使用目标控制器并没有奏效。 instantiateViewControllerWithIdentifier 需要一个字符串并抱怨调用中的参数太多
您的代码不起作用,因为您需要在调用 performSegueWithIdentifier
时使用作为参数传递的特定 ID 在故事板中设置一个 segue。因此,在您的情况下,您需要创建 ID 为 "SegueID"
的 segue,因为这是您传递给该调用的字符串。
如果您不想使用情节提要来执行此操作,您仍然可以直接使用 UINavigationController
(毕竟,segue 在后台使用 UINavigationController
)。
然后你只需要手动实例化你的目标视图控制器(例如通过使用
self.storyboard.instantiateViewControllerWithIdentifier(<your vc id from the storyboard>, animated:true)
或者从笔尖加载它
init(nibName:bundle:)
然后使用
将其推送到导航堆栈self.navigationController.pushViewController(<the formerly instantiaded vc>)