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