ios - 从 MasterView 触发 DetailView 中的弹出窗口

标签 ios xcode swift segue uisplitviewcontroller

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

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

Template from Xcode (来自 Xcode 的模板) Template from the book (书中的模板)

我想做的是在 Master View Controller 的工具栏中放置一个“+”按钮,然后触发 Detail View Controller 中另一个 ViewController 的全屏弹出。请参阅联系人应用程序作为引用,如果您在 iPad 或 iPhone Plus 上横向运行它,就会发生这种情况:

Example from contacts app (联系人应用程序中的示例)

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

谢谢

最佳答案

从默认的 MD 模板开始:

  • MasterViewControllerviewDidLoad 中移除 addButton 代码。

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

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

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

例如:

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

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

关于ios - 从 MasterView 触发 DetailView 中的弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37252300/

相关文章:

iphone - UITableView 部分标题中的字体大小、字体颜色、阴影颜色和偏移量是多少?

Xcode 10 似乎破坏了 com.apple.commcenter.coretelephony.xpc

ios - 如何在选中自动布局的情况下使用 ScrollView 和 ContainerView

ios - tableView 中的自动布局

swift - 删除场景 View 节点后应用程序崩溃

ios - 自定义单元格中的不同图像

ios - Swift Plist 读取和初始化数组作为键的对象

iphone - 充满 NSDictionaries 的 NSArray。如何找到对象的索引?

ios - 断点后如何在 Xcode 中查看此 Swift 类对象的内容?

objective-c - 无法在 Storyboard 中将按钮\标签与变量\导出连接起来