从 MasterView 触发 DetailView 中的弹出窗口

Trigger popover in DetailView from MasterView

我是 iOS 编程的新手(通过 Swift 学习)并且最近对 Master Detail Applications 感兴趣,因为我正在学习的书的当前章节就是关于它的,也是。

我注意到我的书似乎有点太旧了,因为 Xcode 的 Master Detail Apps 模板引入了 Split View Controller,而书中的模板仍然只使用 Navigation Controller 作为初始 ViewController:

(模板来自 Xcode) (书中的模板)

我想做的是在主视图控制器的工具栏中放置一个“+”按钮,然后在详细视图控制器内触发另一个 ViewController 的全屏弹出窗口。请参阅联系人应用程序作为参考,如果您 运行 在 iPad 或 iPhone 上横向显示,则会发生这种情况加号:

(联系人应用程序中的示例)

在书中的示例中,只是将“+”添加到工具栏,并从中添加了一个 segue 到新的 View Controller,但使用 Xcode 的新视图控制器并不容易模板。我怎样才能在详细信息视图中制作这样一个弹出窗口,但是由主视图中的按钮启动的?

谢谢

从默认 MD 模板开始:

  • MasterViewControllerviewDidLoad 中删除 addButton 代码。

  • 在情节提要中为母版创建一个添加按钮,然后link将其添加到MasterViewController操作。

  • 从您的细节控制器创建一个 segue 到您想要用作叠加层的控制器并为其命名。

  • 在执行该 segue 的细节控制器中创建一个方法。

例如:

func displayOverlay() {
    print("perform a segue here to the required controller")
    self.performSegueWithIdentifier("overlay", sender: self)
}
  • 在master action中,调用detail方法触发segue。

例如:

@IBAction func detailAdd(sender: AnyObject) {
    if let dvc : DetailViewController = detailViewController {
        dvc.displayOverlay()
    } else {
        print("Oops...no detail controller")
    }
}

如果您想要显示的动画样式,您将需要做额外的工作,但这应该让您获得基本的控制器连接。