Desmond
Desmond

Reputation: 5001

how to pass value when popToRoot

will like to know how do i pass value back to the root view controller when i popToRoot.

introVideoViewController *intro = [introVideoViewController alloc];
    intro.fromReset =1;
    [self.navigationController popToRootViewControllerAnimated:NO];

Upvotes: 1

Views: 556

Answers (2)

The iOSDev
The iOSDev

Reputation: 5267

Just use the below code

NSArray *arr = [self.navigationController viewControllers];
CLASS_OF_ROOT_VIEW_CONTROLLER *rvc = (CLASS_OF_ROOT_VIEW_CONTROLLER *)[arr objectAtIndex:0];
rvc.variable = value;

Upvotes: 2

SomaMan
SomaMan

Reputation: 4164

With the VC that you want to pop back from, you need to give it a delegate property -

@class MyViewController;

@protocol MyViewControllerDelegate <NSObject>

    -(void)myViewControllerDidDismiss:(MyViewController *)controller withSomeObject:(id)someObject;

@end


@interface MyViewController : UIViewController

@property (nonatomic, assign) id<MyViewControllerDelegate> myViewControllerDelegate;

@end

...and in the root VC you make it conform to that protocol, and implement the dismiss method -

-(void)myViewControllerDidDismiss:(MyViewController *)controller withSomeObject:(id)someObject {

    // now I've got the object from the VC I just popped

}

Forgot to mention that you need to call myViewControllerDidDismiss:withSomeObject: when you pop the VC.

Edit - Also forgot to mention that you need to set the VC's delegate as your root VC when you create it, or else it'll be trying to call nil when you pop back -

[myViewController setMyViewControllerDelegate:self];

Upvotes: 3

Related Questions