Reputation: 5435
I have a uinavigationcontroller. After logged in i want to remove viewcontrollers like RegisterViewController,LoginViewController etc from UInavigationcontroller stack..
I mean i have to remove a particular view controller from stack ? How its possible. ?
I checked this post
So we can take it into an array like
NSArray *allviewcontrollers= [(UINavigationController *)navigationController viewControllers];
But how to do further process.. This question is hunting me for long time..Please answer me ..Thanks in advance
Upvotes: 30
Views: 36089
Reputation: 11
Here is my solution. You can set the tag or a fixed property to your viewcontrollers, then you could traverse the uinavigationcontroller stack to search the target viewcontroller(vcToRemove) and remove it. This could be safer. The code:
NSInteger tag = vcToRemove.wvTag;
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: vcToRemove.navigationController.viewControllers];
int i = 1;
for (i = 1; i <=[allViewControllers count]; i++) {
UIViewController *vc = [allViewControllers objectAtIndex:i];
if ([vc isKindOfClass:[MyWebViewController class]]) {
if (((MyWebViewController *)vc).wvTag == tag) {
[allViewControllers removeObjectAtIndex:i];
break;
}
}
}
vcToRemove.navigationController.viewControllers = allViewControllers;
Upvotes: 1
Reputation: 23722
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers];
[allViewControllers removeObjectIdenticalTo: removedViewController];
navigationController.viewControllers = allViewControllers;
Upvotes: 86