如何使用 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+) 中创建一个弹出框,请使用 UIButtonUIToolbarButton 并在按钮和您想要弹出的 UIViewController 之间创建一个 Storyboard Segue em>。

在一个按钮和另一个UIViewController 之间创建一个segue 很简单。方法如下:

    单击情节提要中的按钮,然后从按钮Control+拖动UIViewController 选择。您应该会看到一条从按钮延伸到鼠标尖端的浅蓝色线条。

    将蓝线拖到选择的 ViewController 后,会出现一个黑色的小菜单。此菜单显示不同的 segue 选项。选择Popover

    如果一切都正确完成,当按钮被选中时,这个 segue 应该在 Connections Inspector 中可见:

您创建的UIViewController 还应该有一个小于全屏的自定义尺寸。您可以通过选择 View Controller 并将其 size 属性设置为 freeformmaster (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 构建带有原型表视图单元的动态表视图

将项目从 XIB/NIB 移动到 Storyboards

如何使用 Storyboards/Cocoa 在 Swift 3.x 中引用视图的窗口

如何根据目标C中StoryBoards中的特定条件转到新视图