使用 Storyboard 在视图之间转换

Posted

技术标签:

【中文标题】使用 Storyboard 在视图之间转换【英文标题】:Transition between Views with Storyboard 【发布时间】:2012-01-01 19:31:55 【问题描述】:

在我的应用程序中,我有一个启用多个选项卡的选项卡栏控制器。其中一个选项卡如下图所示:

按下“i”按钮,打开第二个视图。通过按下“返回”按钮,第一个视图再次打开。这些过渡是使用 Storyboard Segues 完成的。

问题是,如果我对 Segue 使用 Modal 样式,Tab 栏就会消失。 我的问题是:在 Tab bar 的情况下只能使用 Push 风格的 Segues 吗?有没有办法实现模态转换并通过 Storyboard 保持标签栏可见?

提前谢谢你,亚萨

【问题讨论】:

【参考方案1】:

这与UINavigationController 的情况类似。使用除push 之外的任何类型的序列都不会保留导航栏或标签栏。 UINavigationController 的解决方法是将详细视图嵌入到它自己的 UINavigationController 中。如果你仔细想想,这是有道理的。模态序列的目的是向用户呈现一些可操作的,也许是离题的信息。从用户体验理论来说,您通常只会提供几种方法来摆脱该用例。

对于标签栏,在希望标签栏保持可见的同时使用模态序列并没有真正意义,因为这将允许用户导航离开您的模态视图。话虽如此,您可以尝试使您的模态视图的高度缩短,这样当它被推入堆栈时它不会覆盖标签栏。这是未经测试的,但在我看来这是可能的。

【讨论】:

感谢您的回答。我不了解导航控制器的解决方法,因为模态序列无法连接到导航控制器。关于您关于标签栏的建议,我无法更改模态视图的大小,因为这是控制器的唯一视图,它必须是整个屏幕大小......实际上我使用了 [self dismissViewControllerAnimated:YES completion:nil]; 的委托从模态视图返回并再次获得标签栏。但这只是问题的部分解决方法:任何其他建议将不胜感激!!! 单击用作模式的视图控制器,然后转到Editor->Embed in Navigation Controller。这将使您的导航控制器进入模态视图。但是,您将无法将主标签栏添加到模态视图。它根本不符合模式视图控制器的范例和正常使用。【参考方案2】:

使用自定义 segue 来执行此操作。

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomSegues/CreatingCustomSegues.html

并使用 pushViewController 代替 presentModalViewController。

- (void)perform

    // Add your own animation code here.

    [[self sourceViewController] presentModalViewController:[self destinationViewController] animated:NO];

改成

- (void)perform

    // Add your own animation code here.

    [self.sourceViewController.navigationController pushViewController:destination animated:NO];

【讨论】:

以上是关于使用 Storyboard 在视图之间转换的主要内容,如果未能解决你的问题,请参考以下文章

不使用 Storyboard segues 的自定义视图转换 (Swift)

使用 Storyboard 推动 segue

如何使用 Storyboard 在 iOS 中的 UIViewController 之间切换

子类化的 UIView,当设置为 Storyboard 中的默认视图时,编译器无法识别而不进行强制转换

在 Swift 中的视图控制器之间传递数据

使用 Xcode Storyboard 从表格视图单元推送到详细视图