0

我在一个下拉列表中有 4 个视图控制器。当我从下拉列表中选择一个视图控制器时,如果视图控制器已经在堆栈中(即,已经推送)它应该被弹出或推送。

4

5 回答 5

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];
    }
}
于 2013-03-08T10:35:55.210 回答
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];
于 2013-03-08T10:25:13.040 回答
0

您可以简单地检查navigationController要推送或弹出的视图控制器上的属性。如果 vc 在导航堆栈上,则设置此属性,nil如果不在。这将使您免于遍历堆栈上的所有 vcs 并进行丑陋的类测试。

假设您想知道它theVC是否在导航控制器堆栈上,您可以这样做:

if (theVC.navigationController == nil)
    //push the vc on the nav stack
else
    //pop the vc from the nav stack
于 2013-03-08T10:35:38.453 回答
0

我建议更好地维护一个数组。您只需要维护导航控制器的关键字,这是您可以添加对象的方式,其逻辑不实用,因此请相应理解

检索时检查对象是否在数组中,如果是则弹出它。弹出时将其从堆栈中删除,否则将其推送

于 2013-03-08T10:54:17.343 回答
-1

尝试这个:

UIViewController *currentView = [[UIViewController alloc] init];
currentView = [navigationController.visibleViewController retain];
if (![currentView isMemberOfClass:[YourViewController class]])
{
    //push
}

else
{
    //pop
}
[currentView release];

注意:如果您使用 ARC,请进行调整。

确保引用正确的 navigationController

于 2013-03-08T10:28:14.833 回答