Checking if a ViewController on Navigation Stack exists
14,165
Solution 1
- (void) leftViewDidHide{
if ([((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers count] == 1) {
SGServerListViewController *sample = [[[((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers objectAtIndex:1]childViewControllers] objectAtIndex:0];
[sample.serverTableView setUserInteractionEnabled:YES];
}
}
Solution 2
NSArray *viewControlles = [self.navigationController.viewControllers];
for (int i = 0 ; i <viewControlles.count; i++){
if ([YourVC isKindOfClass:[viewControlles objectAtIndex:i]]) {
//Execute your code
}
}
Solution 3
NSArray *controllerArray = [self.navigationController.viewControllers];
//will get all the controllers added to UINavigationController.
for (id controller in controllerArray)
{
// iterate through the array and check for your controller
if ([controller isKindOfClass:[checkYourController class]])
{
//do your stuff here
}
}
just for an idea containsObject:
method of NSArray
class might also work.
Solution 4
-(BOOL)isControllerAlreadyOnNavigationControllerStack{
for (UIViewController *vc in self.navigationController.viewControllers) {
if ([vc isKindOfClass:Controller.class]) {
[self.navigationController popToViewController:vc animated:NO];
return YES;
}
}
return NO;
}
if (![self isControllerAlreadyOnNavigationControllerStack]) {
//push controller
}
Solution 5
You can do that (checking if a ViewController on Navigation Stack exists) with this code:
if navigationController?.viewControllers.count > 1 {
for root in (self.navigationController?.viewControllers)! {
if root is ViewController {
let i = root as? ViewController
i?.table.removeFromSuperview()
}
}
}
self.navigationController?.popToRootViewControllerAnimated(true)
Author by
Sergey Grischyov
St. Petersburg State University graduate. Cocoa Controls contributor.
Updated on June 19, 2022Comments
-
Sergey Grischyov almost 2 years
I have this code here to check on the existence of the
ViewController
. And unfortunately it doesn't work. The thing is, it is executed at the moment of another VC popping from theNavigation Stack
:- (void) leftViewDidHide{ if ([((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers objectAtIndex:1]) { SGServerListViewController *sample = [[[((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers objectAtIndex:1]childViewControllers] objectAtIndex:0]; [sample.serverTableView setUserInteractionEnabled:YES]; } }
The app crashes with an exception breakpoint pointing me to the line with an
if
statement. Any ideas on what could be wrong here? I'm just trying to check if thisVC
is there and if it is - execute the code.