繁体   English   中英

如何在uinavigationcontroller堆栈中检查uiviewcontroller

[英]How to check a uiviewcontroller is present in uinavigationcontroller stack

我有一个UINavigationController 我必须从UINavigationController弹出一个视图并将其替换为另一个视图。 我们如何搜索UIViewController对象并将其替换为另一个?

当我打印

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:           myDelegate.navigationController.viewControllers];

我试过了..

[allViewControllers removeObjectIdenticalTo: @"NonLogginedViewController"];         
[allViewControllers removeObjectIdenticalTo: myDelegate.nonLogginedViewController];
myDelegate.navigationController.viewControllers = allViewControllers;

但是它没有更新UINavigationController堆栈。我不知道如何在UINavigationController堆栈中使用removeObjectIdenticalTo ..

请帮我 ..


首先,你的测试:

[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: override中,例如:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated]; 
    NSMutableArray *allControllers = ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM