我想从使用连接到 Split View Controller 的导航 Controller 呈现的“H”中的 View 容器进行 segue。我怎样才能做到这一点?我已经尝试使用本地链接的 Storyboard ID 进行常规 performSegueWithIdentifier,但这会删除顶部导航栏。我想保留顶部导航栏并执行 segue,就好像它是使用主导航 Controller 完成的一样(选择哪个 View Controller 的行显示在详细 View 中)。
非常感谢任何帮助!
最佳答案
这是一个如何从嵌入式 ViewController 执行 segue 的示例。
ViewController.swift
import UIKit
protocol SegueHandler: class {
func segueToNext(identifier: String)
}
class ViewController: UIViewController, SegueHandler {
func segueToNext(identifier: String) {
self.performSegueWithIdentifier(identifier, sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "EmbedH" {
let dvc = segue.destinationViewController as! HViewController
dvc.delegate = self
}
}
}
HViewController.swift
import UIKit
class HViewController: UIViewController {
weak var delegate: SegueHandler?
@IBAction func pressH(sender: UIButton) {
delegate?.segueToNext("GoToGreen")
}
}
设置:
- 使用委托(delegate)让
HViewController
告诉其嵌入的 viewController 执行 segue。 创建一个名为
SegueHandler
的协议(protocol),它仅描述一个实现方法segueToNext(identifier: String)
的类。protocol SegueHandler: class { func segueToNext(identifier: String) }
通过将它添加到
class
声明行,让您的 viewController 实现此协议(protocol):class ViewController: UIViewController, SegueHandler {
并通过实现所需的功能。
将
delegate
属性添加到HViewController
:weak var delegate: SegueHandler?
单击 ViewController 和 HViewController 之间的嵌入转场箭头。在 Attributes Inspector 中为其指定标识符
"EmbedH"
。通过 Control 从 ViewController 顶部的 viewController 图标拖动到 GreenViewController,在 ViewController 和 GreenViewController 之间创建一个显示 segue。在 Attributes Inspector 中将此 segue 命名为
“GoToGreen”
。在 ViewController 的
prepareForSegue
中,当"EmbedH"
segue 发生时,设置HViewController< 的
到delegate
属性self
(ViewController)。当用户点击
HViewController
中的H
按钮时,调用delegate?.segueToNext("GoToGreen")
触发ViewController 中的 segue。
这里是在模拟器中运行:
关于ios - 如何在导航 Controller 显示的 View 中从容器 View 执行 segue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37571139/