如何使用 Xcode Storyboards 创建 Popovers
Posted
技术标签:
【中文标题】如何使用 Xcode Storyboards 创建 Popovers【英文标题】:How to create Popovers with Xcode Storyboards 【发布时间】:2012-01-05 03:39:01 【问题描述】:如何在 iPad Storyboard 中为 ios 5.0+ 应用创建弹出框?
Xcode 项目模板(实用程序)已经有一个设置,但我似乎无法弄清楚 Apple 是如何让它工作的。我试图模仿它,但只有错误。我什至查看了 Apple 的 Dev Site,但只得到了导致警告和构建错误的过时代码。
我有一个CBMainView
和一个CBMasterView
(除了已经包含的主视图),还有一个UIToolbar
和一个UIToolbarButton
。我需要用户点击UIToolbar
上的按钮,然后我的 320x300 Popover (CBMasterView
) 出现了。
如何使用 Xcode Storyboards 做到这一点?欢迎提供教程、答案、代码或链接!
【问题讨论】:
我建议仍然将 Popover 保留到他们自己的 .xib 文件中。故事板有时会变得太大。这发生在我身上,我最终将所有弹出框移动到 xib 文件中,并且在我的 Storyboard 中的性能要好得多。之前非常卡顿,我的MBP非常好 @RyanG 故事板文件的大小不应影响运行时性能(尽管它可能会影响 Xcode 的速度)。如果大型故事板显着影响您的运行时性能,您应该提交bug report with Apple。你也可以问一个关于 SO 的问题。 【参考方案1】:在 iOS 5 之前,需要通过模态演示(和一堆代码)使用 First Responder 显示另一个 UIViewController
。
要在 Xcode 的 Storyboard Mode (iOS 5+) 中创建一个弹出框,请使用 UIButton
或 UIToolbarButton
并在按钮和您想要弹出的 UIViewController
之间创建一个 Storyboard Segue em>。
在一个按钮和另一个UIViewController
之间创建一个segue 很简单。方法如下:
-
单击情节提要中的按钮,然后从按钮Control+拖动 到
UIViewController
选择。您应该会看到一条从按钮延伸到鼠标尖端的浅蓝色线条。
将蓝线拖到选择的 ViewController 后,会出现一个黑色的小菜单。此菜单显示不同的 segue 选项。选择Popover
。
如果一切都正确完成,当按钮被选中时,这个 segue 应该在 Connections Inspector 中可见:
您创建的UIViewController
还应该有一个小于全屏的自定义尺寸。您可以通过选择 View Controller 并将其 size 属性设置为 freeform
或 master
(320 x 850) 来设置自定义大小。
【讨论】:
【参考方案2】:我也在寻找这个问题的答案。我确实使用 NSNotification 解决了它。
方法如下:
显示弹出窗口的视图控制器应该注册以接收通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(languageSetup) name:SPVWChangeLanguage object:nil];
languageSetup
是将被调用的函数,SPVWChangeLanguage
是您将在弹出视图控制器中定义的字符串
我在viewDidAppear
添加了这一行
现在,当用户在表格中选择某些内容时,在您的弹出视图控制器中添加此行:
[[NSNotificationCenter defaultCenter] postNotification: [NSNotification notificationWithName: SPVWChangeLanguage object:self]];
在关闭弹出窗口之前:
[self.popOverController dismissPopoverAnimated:YES];
就是这样。将调用选择器语言设置(在我的情况下)。当您的视图控制器消失时,请务必删除通知:
[[NSNotificationCenter defaultCenter] removeObserver:self];
我在viewWillDisappear
做这个
我认为一定有更简单的方法。但至少,这个对我有用。
【讨论】:
【参考方案3】:如果你在IOS8上使用storyboard,看看这个帖子,为我解答!
How to present a modal atop the current view in Swift
简而言之:您制作一个单独的弹出视图,为背景提供低(或无)不透明度的颜色,然后使用模态转接从您的主视图连接到弹出视图。
然后在情节提要中,单击 segue,然后在属性检查器中:将演示文稿更改为“在当前上下文中”(如果您使用大于 0 的不透明度,则可能转换为交叉溶解)
到目前为止我见过的最简单的方法!
【讨论】:
以上是关于如何使用 Xcode Storyboards 创建 Popovers的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 Storyboards 创建非全屏 UITableView?
Xcode OS X Storyboards:如何获得对***“窗口内容”视图控制器的引用?
使用 Xcode 5 Storyboards 构建带有原型表视图单元的动态表视图