Ios 在MasterView的DetailView中触发popover

Ios 在MasterView的DetailView中触发popover,ios,xcode,swift,segue,uisplitviewcontroller,Ios,Xcode,Swift,Segue,Uisplitviewcontroller,我不熟悉iOS编程(使用Swift学习),最近对Master-Detail应用程序产生了兴趣,因为我正在学习的这本书的当前章节也是关于它的 我注意到我的书似乎有点太旧了,因为Xcode的Master Detail应用程序模板引入了拆分视图控制器,而书中的模板仍然使用导航控制器作为初始视图控制器: (来自Xcode的模板) (书中的模板) 我想做的是在主视图控制器的工具栏中放置一个“+”按钮,然后触发局部视图控制器内另一个ViewController的全屏弹出窗口。将contacts应用程序作为

我不熟悉iOS编程(使用Swift学习),最近对Master-Detail应用程序产生了兴趣,因为我正在学习的这本书的当前章节也是关于它的

我注意到我的书似乎有点太旧了,因为Xcode的Master Detail应用程序模板引入了拆分视图控制器,而书中的模板仍然使用导航控制器作为初始视图控制器:

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

我想做的是在主视图控制器的工具栏中放置一个“+”按钮,然后触发局部视图控制器内另一个ViewController的全屏弹出窗口。将contacts应用程序作为参考,如果您在iPad或iPhone Plus上以横向模式运行它,则会发生这种情况:

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

在本书的示例中,只在工具栏中添加了“+”,并在新的视图控制器中添加了一个序列,但使用Xcode的新模板并不容易。如何在详细视图中创建这样一个弹出窗口,但它是由主视图中的按钮启动的


谢谢

从默认MD模板开始:

  • MasterViewController
    viewDidLoad
    中删除
    addButton
    代码

  • 在情节提要中为主控创建一个添加按钮,并将其链接到
    MasterViewController
    操作

  • 创建一个从细节控制器到要用作覆盖的序列,并为其命名

  • 在细节控制器中创建执行该步骤的方法

例如:

  • 在主操作中,调用detail方法来触发segue
例如:


如果您想要显示的动画样式,您需要做额外的工作,但这将为您提供基本的控制器连接。

谢谢!如何从主视图控制器调用该方法?我知道您必须引用详细视图控制器,但我不知道主控制器如何具有该引用(称为
detailViewController
)。查看更新后的答案,了解操作方法可能是什么样子。我想我找到了一个更好的方法:如果您改为创建一个从UISplitView到新视图的segue,并使用
self.splitViewController?在主视图内触发它。performsgueWithIdentifier(id,sender:sender)
,视图会根据需要显示,根据您是处于纵向模式还是横向模式,就像默认的
showdeail
segue一样。你的方法只适用于横向模式,但无论如何,谢谢你,你引导我进入了正确的方向!
func displayOverlay() {
    print("perform a segue here to the required controller")
    self.performSegueWithIdentifier("overlay", sender: self)
}
@IBAction func detailAdd(sender: AnyObject) {
    if let dvc : DetailViewController = detailViewController {
        dvc.displayOverlay()
    } else {
        print("Oops...no detail controller")
    }
}