【问题标题】:Call storyboard scene without creating a segue in swift?调用情节提要场景而不快速创建转场?
【发布时间】:2015-05-31 05:34:48
【问题描述】:

我创建了一个场景并尝试将类链接到场景并使用情节提要创建一个 segue 并使用 self.performSegueWithIdentifier("SegueID", sender: self) 并且无论我做什么(即干净构建)我仍然得到相同的错误 “原因: 'Receiver () 没有标识符为'SegueID'的segue'"

我认为解决此问题的最佳方法是在这种情况下一起避免转场。

那么有没有办法在不使用 segue 的情况下从代码中的视图进行调用以转换到另一个视图?

编辑 我已经尝试了所有三种方法,但无济于事。最常见的方法是在故事板中的两个场景之间创建一个转场并为其命名,在我的例子中是“详细信息”,但转场无法识别。

所以我尝试了从 nib 加载它然后将该 nib 推送到导航堆栈的下一种方法,但是当编译和构建程序并单击按钮以呈现给新的视图控制器时,除了函数 println 正在执行。

并且尝试手动使用目标控制器是行不通的。 instantiateViewControllerWithIdentifier 需要一个字符串并抱怨调用中的参数太多

【问题讨论】:

  • 我的回答有帮助还是您需要更多解释?

标签: ios swift uiviewcontroller segue


【解决方案1】:

您的代码不起作用,因为您需要在情节提要中设置一个带有特定 ID 的 segue,当您调用 performSegueWithIdentifier 时将其作为参数传递。因此,在您的情况下,您需要创建一个 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>)

【讨论】:

  • 我尝试了 self.storyboard.instantiateViewControllerWithIdentifier("VC2") 并因致命错误而崩溃:即使我有一个视图控制器,在展开可选值时意外发现 nil VC2类
  • 谢谢!我做的有点不同,但这有效。 让 viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("VC2") as! UIViewController self.presentViewController(viewController, animated: false, completion: nil)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
相关资源
最近更新 更多