使用 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 在 iOS 中的 UIViewController 之间切换