Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unwind Segue for UINavigationController

I have a simple UINavigationController which pushes a UIViewController onto the stack via a custom segue. I then implemented an IBAction on the first UIViewController to perform an unwind action and I implement segueForUnwindingToViewController. Unfortunately, the segueForUnwindingToViewController is not being called (I did confirm that canPerformUnwindSegue is being called on the first VC).

I have not seen any simple examples of this behavior. Can anyone please help? Thanks.

Here's the code from the root view controller of the 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;
}
like image 402
Clay Avatar asked Apr 18 '13 20:04

Clay


People also ask

What is an unwind segue?

Unlike the segues that you use to present view controllers, an unwind segue promises the dismissal of the current view controller without promising a specific target for the resulting transition. Instead, UIKit determines the target of an unwind segue programmatically at runtime.


1 Answers

I had the same problem and I finally found a solution: https://github.com/simonmaddox/CustomUnwindSegue

He also had a problem with it not being called. Turns out that any view controller that is in a UINavigationController will not call the presenting view controller but the UINavigationController instead. This means you must subclass that UINavigationController and add that method there instead.

like image 131
matrinox Avatar answered Oct 03 '22 08:10

matrinox