ios - 如何在导航 Controller 显示的 View 中从容器 View 执行 segue?

标签 ios xcode swift

Storyboard

我想从使用连接到 Split View Controller 的导航 Controller 呈现的“H”中的 View 容器进行 segue。我怎样才能做到这一点?我已经尝试使用本地链接的 Storyboard ID 进行常规 performSegueWithIdentifier,但这会删除顶部导航栏。我想保留顶部导航栏并执行 segue,就好像它是使用主导航 Controller 完成的一样(选择哪个 View Controller 的行显示在详细 View 中)。

非常感谢任何帮助!

最佳答案

这是一个如何从嵌入式 ViewController 执行 segue 的示例。

Sample Storyboard


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")
    }

}

设置:

  1. 使用委托(delegate)让 HViewController 告诉其嵌入的 viewController 执行 segue。
  2. 创建一个名为 SegueHandler 的协议(protocol),它仅描述一个实现方法 segueToNext(identifier: String) 的类。

    protocol SegueHandler: class {
        func segueToNext(identifier: String)
    }
    
  3. 通过将它添加到 class 声明行,让您的 viewController 实现此协议(protocol):

    class ViewController: UIViewController, SegueHandler {
    

    并通过实现所需的功能。

  4. delegate 属性添加到 HViewController:

    weak var delegate: SegueHandler?
    
  5. 单击 ViewController 和 HViewController 之间的嵌入转场箭头。在 Attributes Inspector 中为其指定标识符 "EmbedH"

  6. 通过 Control 从 ViewController 顶部的 viewController 图标拖动到 GreenViewController,在 ViewController 和 GreenViewController 之间创建一个显示 segue。在 Attributes Inspector 中将此 segue 命名为 “GoToGreen”

  7. 在 ViewController 的 prepareForSegue 中,当 "EmbedH" segue 发生时,设置 HViewController< 的 delegate 属性self (ViewController)。

  8. 当用户点击HViewController中的H按钮时,调用delegate?.segueToNext("GoToGreen")触发ViewController 中的 segue。


这里是在模拟器中运行:

Simulator Demonstration

关于ios - 如何在导航 Controller 显示的 View 中从容器 View 执行 segue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37571139/

相关文章:

ios - 更改按钮文本 - Xcode 6

ios - type()不符合协议(protocol)

ios - 以编程方式在 Swift 中从一个 UIViewController 移动到另一个

ios - 如何使用Webview点击并下载文件

ios - 如何播放阵列中的特定声音?

ios - 编辑 Storyboard时 Xcode 7.x 崩溃

ios - 某些自定义 UITableViewCells 未呈现

ios - MFMailComposeViewController 获取邮件正文

iphone - 如何从委托(delegate)外部设置 super View ?

ios - 合并两个xcode项目并根据条件运行