带有情节提要的 iPad 上的 UISplitViewController?
Posted
技术标签:
【中文标题】带有情节提要的 iPad 上的 UISplitViewController?【英文标题】:UISplitViewController on iPad with Storyboards? 【发布时间】:2012-02-14 05:38:29 【问题描述】:在 Xcode 中,如何创建一个使用 Storyboard 的简单 iPad 应用程序,以便为每个条目换出 DetailView 控制器?我见过的大多数示例都使用 iPhone,或者他们只是更改了同一个详细视图控制器中的值。
我想在 Interface Builder 中从静态 TableView 控制器(比如 3 行)创建转场,其中每一行将加载不同的游戏细节视图控制器,我将拖出并在 IB 中设计。目前,当我使用 segue 连接视图控制器时,它会替换 UISplitViewController 的导航部分。换句话说,这就像我正在遍历一棵树,我需要告诉 IB 我在根节点,我应该更改详细视图。
【问题讨论】:
对于使用 Universal Storyboards 解决此问题的 Swift + ios8 解决方案,您可能喜欢查看我的代码 - swiftwala.com/multiple-detail-views 【参考方案1】:斯坦福大学 CS193p 2011 年秋季课程的第 6 和第 7 课是 segues 的一个很好的起点。
http://itunes.apple.com/us/itunes-u/ipad-iphone-application-development/id473757255
讲师 Paul Hegarty 涵盖所有内容。然而,在下课之前他没有时间回答这个问题。他确实在文件中包含了最终解决方案的来源:Pill.zip 博士的心理学家。
http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2011-fall
基本上,这个问题需要做的就是从每个 UITableCell 按住 Ctrl 并拖动到相应的游戏细节视图控制器,然后选择 Replace segue。由于默认情况下 Xcode 认为您要替换主控制器,因此视图控制器将缩小,因此还有一步。对于每个segue,选择连接线,然后在属性检查器中将目标从“Master Split”更改为“Detail Split”。至此,你可以用弹窗进行测试,无需编写任何代码。
【讨论】:
我的解决方案有问题。执行此操作时,它会替换详细导航控制器,因此无法回调弹出窗口。 你看过斯坦福班的第 7 集吗?如果您没有正确设置委托,可能会发生这种情况。 其实这个例子应该会有所帮助:github.com/toddwbates/MultipleMasterDetailViews 哇...谢谢这个回答老兄。它为我节省了一天:) 非常感谢 请注意,如果您使用的是 iOS 8 自适应转场,则称为“显示详细信息(例如替换)”,无需将目标设置为详细拆分 - 没有“目标”选项.效果很好!【参考方案2】:Apple 提供了一个更通用解决方案的示例代码,用于解决如何根据主视图中选择的内容交换不同的详细视图的问题。 Apple 示例代码通过引入 UISplitViewControllerDelegate 协议的自定义实现来实现这一点:
https://developer.apple.com/library/ios/samplecode/MultipleDetailViews/Introduction/Intro.html
【讨论】:
【参考方案3】:没有图片很难描述,但是:有一个导航控制器作为主控。然后用一个替换的命名segue挂起每个detailview。 然后你需要一些代码。 在 didSelectRowAtIndexPath 中的主视图控制器中,您需要一个基于 indexpath.row 的 switch 语句,并在每一行中调用 detailview performSegueWithIdentifier:@"the row you want"
【讨论】:
您可以随时在答案中添加图片 :) 可能也是赢得赏金的好方法! 我添加了一张图片。例如,当我单击“Game #2”时,如何创建 Game 2 视图控制器的 segue?我可以用我的 UITableViewCells 中的 Ctrl 拖动 segues 来做到这一点吗?以上是关于带有情节提要的 iPad 上的 UISplitViewController?的主要内容,如果未能解决你的问题,请参考以下文章
找不到名为“MainStoryboard_iPad”的情节提要
如何使用情节提要为 ipad 的 xcode 中的第一个视图内的第二个视图添加动画