我在下拉列表中有4个视图控制器。当我从下拉列表中选择一个视图控制器时,如果视图控制器已经在堆栈中(即已经被推入),则应该弹出或推送它。
答案 0 :(得分:3)
for (UIViewController*vc in [self.navigationController viewControllers]) {
if ([vc isKindOfClass: [TestViewController class]]){
[[self navigationController] popToViewController:vc animated:YES];
}
}
答案 1 :(得分:1)
如果在NavigationController中可以出现类“ViewController”的相同实例,那么这将更好用
-(void)gotoViewController:(id )viewController
{
if ([self.navigationController.viewControllers containsObject:viewController])
{
[self.navigationController popToViewController:viewController animated:YES];
}
else
{
[self.navigationController pushViewController:viewController animated:YES];
}
}
答案 2 :(得分:0)
NSInteger index = -1;
NSArray* arr = [[NSArray alloc] initWithArray:self.navigationController.viewControllers];
NSLog(@"View list=== %@",arr);
for(int i=0 ; i<[arr count] ; i++)
{
if([[arr objectAtIndex:i] isKindOfClass:NSClassFromString(@"ViewContollerName")])
{
index = i;
}
}
[self.navigationController popToViewController:[arr objectAtIndex:index] animated:YES];
答案 3 :(得分:0)
您只需检查要推送或弹出的viewcontroller上的navigationController
属性即可。如果vc在导航堆栈上,则设置此属性,如果不在,则设置nil
。这样可以避免迭代遍历堆栈上的所有vcs并进行丑陋的类测试。
假设您想知道导航控制器堆栈上是否有theVC
,您可以这样做:
if (theVC.navigationController == nil)
//push the vc on the nav stack
else
//pop the vc from the nav stack
答案 4 :(得分:0)
我建议更好地维护一个数组。你只需要维护Navigated控制器的关键字,这就是你如何添加逻辑不合实的对象,所以要相应地理解它
检索时检查对象是否在数组中,如果是则弹出它。当poped从堆栈中移除它,否则推它
答案 5 :(得分:-1)
试试这个:
UIViewController *currentView = [[UIViewController alloc] init];
currentView = [navigationController.visibleViewController retain];
if (![currentView isMemberOfClass:[YourViewController class]])
{
//push
}
else
{
//pop
}
[currentView release];
注意:如果您使用ARC,请进行调整。
确保引用正确的navigationController