【问题标题】:Trigger popover in DetailView from MasterView从 MasterView 触发 DetailView 中的弹出窗口
【发布时间】:2016-05-16 10:58:19
【问题描述】:

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

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

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

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

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

在本书的示例中,工具栏上只是添加了“+”,并从它添加了一个 segue 到新的 View Controller,但使用 Xcode 的新模板并不容易。如何在详细视图中制作这样的弹出框,但由主视图中的按钮启动?

谢谢

【问题讨论】:

    标签: ios xcode swift segue uisplitviewcontroller


    【解决方案1】:

    从默认的 MD 模板开始:

    • 从MasterViewController 的viewDidLoad 中删除addButton 代码。

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

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

    • 在细节控制器中创建一个方法来执行该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")
        }
    }
    

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

    【讨论】:

    • 谢谢!我如何准确地从主视图控制器调用该方法?我知道你必须参考细节视图控制器,但我真的不明白如何
    • 主控制器有那个引用(称为detailViewController )。请参阅更新后的答案以了解操作方法的外观。
    • 我想我找到了一个更好的方法:如果您改为创建从 UISplitView 到新视图的 segue,并使用 self.splitViewController?.performSegueWithIdentifier(id, sender: sender) 在主视图内触发它,视图会根据需要呈现,具体取决于无论您是处于纵向还是横向模式,就像默认的showDetail segue 一样。您的方法仅适用于横向模式,但无论如何感谢您引导我走向正确的方向!
    猜你喜欢
    • 2022-06-12
    • 1970-01-01
    • 2013-10-27
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多