我有UINavigationController
。我必须从UINavigationController
弹出一个视图并将其替换为另一个视图。我们如何搜索UIViewController
对象并将其替换为另一个?
当我打印
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: myDelegate.navigationController.viewControllers];
我试过..
[allViewControllers removeObjectIdenticalTo: @"NonLogginedViewController"];
[allViewControllers removeObjectIdenticalTo: myDelegate.nonLogginedViewController];
myDelegate.navigationController.viewControllers = allViewControllers;
但它没有更新UINavigationController
堆栈..
我不知道如何将removeObjectIdenticalTo
用于UINavigationController
堆栈..
请帮帮我..
答案 0 :(得分:26)
首先,你的测试:
[allViewControllers removeObjectIdenticalTo:@“NonLogginedViewController”];
...正在测试字符串,而不是视图控制器。所以这不会奏效。
如果您知道视图控制器在导航控制器堆栈中的位置,那么这很容易。比如说你刚推了一个新的控制器,现在你想删除那个控制器。你可以这样做:
NSMutableArray *allControllers = [self.navigationController.viewControllers mutableCopy];
[allControllers removeObjectAtIndex:allControllers.count - 2];
[self.navigationController setViewControllers:allControllers animated:NO];
但我认为在您的情况下,您想要找到某个控制器并将其删除。一种方法是寻找某个类,例如的LoginController。通过复制旧数组来设置一个新数组,然后遍历这个新数组:
NSArray *allControllersCopy = [allControllers copy];
for (id object in allControllersCopy) {
if ([object isKindOfClass:[LoginController class]])
[allControllers removeObject:object];
}
...然后像以前一样为viewControllers属性设置allControllers数组。
注意:如果您正在从包含视图控制器操作UINavigationController
堆栈 - 可能一旦该视图控制器出现 - 您应该等到视图完全在屏幕上。一个好的地方是viewDidAppear:
覆盖,例如:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSMutableArray *allControllers = ...
}