从 MasterView 触发 DetailView 中的弹出窗口
Posted
技术标签:
【中文标题】从 MasterView 触发 DetailView 中的弹出窗口【英文标题】:Trigger popover in DetailView from MasterView 【发布时间】:2016-05-16 10:58:19 【问题描述】:我是 ios 编程新手(使用 Swift 学习),最近对 Master Detail Applications 感兴趣,因为我正在学习的书的当前章节也是关于它的。
我注意到我的书似乎有点太旧了,因为 Xcode 的 Master Detail Apps 模板引入了一个拆分视图控制器,而书中的模板仍然只使用一个导航控制器作为初始视图控制器:
(来自 Xcode 的模板) (书中模板)
我想做的是在主视图控制器的工具栏中放置一个“+”按钮,然后触发详细视图控制器内另一个视图控制器的全屏弹出窗口。查看联系人应用程序作为参考,如果您在 iPad 或 iPhone Plus 上横向运行它,就会发生这种情况:
(来自联系人应用程序的示例)
在本书的示例中,工具栏上只是添加了“+”,并从它添加了一个 segue 到新的 View Controller,但使用 Xcode 的新模板并不容易。如何在详细视图中制作这样的弹出框,但由主视图中的按钮启动?
谢谢
【问题讨论】:
【参考方案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 一样。您的方法仅适用于横向模式,但无论如何感谢您引导我走向正确的方向!以上是关于从 MasterView 触发 DetailView 中的弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UISplitViewController iOS7.1 上添加 MasterView 的 rightBarButtonItem 隐藏 MasterView 的动作
在 UISplitViewController 中隐藏 MasterView
UISplitView - 为 masterView 中的每一行加载不同的 detailView
获取 UISplitViewController 的 masterview 控制器的显示隐藏事件