segues 仅适用于导航控制器吗? [关闭]
Posted
技术标签:
【中文标题】segues 仅适用于导航控制器吗? [关闭]【英文标题】:Do segues work only with nav controllers? [closed] 【发布时间】:2013-10-11 15:20:26 【问题描述】:我尝试使用情节提要从一个 ViewController 到另一个 ViewController 进行转场,但它引发了异常。
segues 是否仅适用于 NavigationControllers?当我尝试过这种方法时,它起作用了。
【问题讨论】:
什么异常??可能是你使用 seague 的方式是错误的。检查标识符是否与您在故事栏中指定的内容匹配。 【参考方案1】:如果Segue
是从一个ViewController
创建到另一个ViewController
,那么您需要以编程方式执行它,因为只有视图等视觉元素才能响应用户事件,因此如果没有用户交互,ViewController
就无法知道何时执行Segue
。
以下是您如何以编程方式进行操作。
在 Interface Builder 中设置 Segue
标识符。
调用[self performSegueWithIdentifier:@"MySegueIdentifier" sender:nil];
响应事件,即按钮的TouchUpInside
来执行它。
这篇文章有更多信息: Segue implementation via code
注意:如果您没有使用NavigationController
,则不能使用推送Segue
转换,因为这需要NavigationController
。如果您想提出自己的转换,您仍然可以使用Modal
转换类型或Custom
。
【讨论】:
【参考方案2】:如果您使用 Storyboard 从 ViewControllerA
到 ViewControllerB
将 ViewController 嵌入到 UINavigationController
中:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([[segue identifier] isEqualToString:@"showDetail"])
UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
ViewControllerB *viewControllerB = (ViewControllerB *)navController.topViewController;
// Pass data (for example a NSString object)
viewControllerB.aString = myString;
【讨论】:
以上是关于segues 仅适用于导航控制器吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在没有 UINavigationController 的情况下推送 Segue 动画
适用于 iPad 的 UINavigationController [关闭]