UINavigationController 的 Unwind Segue
Posted
技术标签:
【中文标题】UINavigationController 的 Unwind Segue【英文标题】:Unwind Segue for UINavigationController 【发布时间】:2013-04-18 20:12:01 【问题描述】:我有一个简单的 UINavigationController,它通过自定义 segue 将 UIViewController 推送到堆栈上。然后我在第一个 UIViewController 上实现了一个 IBAction 来执行展开操作,然后我实现了 segueForUnwindingToViewController。不幸的是,没有调用 segueForUnwindingToViewController(我确实确认在第一个 VC 上调用了 canPerformUnwindSegue)。
我还没有看到这种行为的任何简单示例。有人可以帮忙吗?谢谢。
这是来自 NavigationController 的根视图控制器的代码。
- (IBAction) unwindFromSegue:(UIStoryboardSegue *)segue
// unwinds back to here
//[self performSegueWithIdentifier:@"UnwindToObjectManageSegue" sender:self];
- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController
withSender:(id)sender
return YES;
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
return YES;
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController
fromViewController:(UIViewController *)fromViewController
identifier:(NSString *)identifier
ObjectManageObjectDetailSegue *segue = [[ObjectManageObjectDetailSegue alloc] initWithIdentifier:identifier source:fromViewController destination:toViewController];
[segue setUnwinding:YES];
return segue;
【问题讨论】:
我假设您已按照 this answer 的步骤进行操作,但对您没有任何帮助,对吗? 没错。我跟着它到了一个 T。不幸的是,我的 unwind segue 没有被调用。标识符被正确发送,但 segue 本身从未被调用。 如果有人可以发布一个示例项目来举例说明该线程中发布的内容,那就太好了。我认为这是一个很好的例子,但它相当分散。 你想在哪里放松?你说你正在从第一个视图控制器中解脱出来。你是指导航控制器的根视图控制器吗? 请发布您的展开方法的代码。 【参考方案1】:我遇到了同样的问题,我终于找到了解决方案: https://github.com/simonmaddox/CustomUnwindSegue
他也有一个问题,它没有被调用。事实证明,UINavigationController 中的任何视图控制器都不会调用呈现视图控制器,而是调用 UINavigationController。这意味着您必须继承该 UINavigationController 并在其中添加该方法。
【讨论】:
天啊,我已经为此苦苦挣扎了大约一天。谢谢!这似乎对故事板和自定义转场的工作方式有点疏忽。但至少我现在有一些东西可以工作! 谢谢 Greeso。大概人忘记了。另外,很高兴帮助 Danny Sung 谢谢!你确实为我节省了一些时间。以上是关于UINavigationController 的 Unwind Segue的主要内容,如果未能解决你的问题,请参考以下文章
在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?
iOS:如何在现有 UINavigationController 中打开另一个 UINavigationController?
UINavigationController 与 AppDelegate 中的 UISegmentedControl 切换 UINavigationController 的 rootviewcontr
关闭 UINavigationController 并呈现另一个 UINavigationController
从嵌入在 UINavigationController 中的一个视图控制器到另一个 UINavigationController