0

ドロップダウンに4つのViewControllerがあります。ViewControllerがすでにスタックにある(つまり、すでにプッシュされている)場合、ドロップダウンからView Controllerを選択すると、ポップするか、プッシュする必要があります。

4

5 に答える 5

1

クラス「ViewController」の同じインスタンスがnavigationControllerで発生する可能性がある場合、これはより適切に機能します

-(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

navigationControllerプッシュまたはポップするビューコントローラのプロパティを確認するだけです。このプロパティは、vcがnavスタックにある場合とnilそうでない場合に設定されます。これにより、スタック上のすべてのvcを繰り返し処理し、醜いクラステストを行う必要がなくなります。

がナビゲーションコントローラースタックにあるかどうかを知りたい場合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
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

配列を維持することをお勧めします。Navigated controller のキーワードのみを維持する必要があります。これは、実用的ではない論理的なオブジェクトを追加する方法であるため、それに応じて理解してください

取得時に、オブジェクトが配列内にあるかどうかを確認し、存在する場合はポップします。ポップされたらスタックから削除し、それ以外の場合はプッシュします

于 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 を使用している場合は調整します。

正しいナビゲーションコントローラーを参照していることを確認してください

于 2013-03-08T10:28:14.833 に答える