我在一个下拉列表中有 4 个视图控制器。当我从下拉列表中选择一个视图控制器时,如果视图控制器已经在堆栈中(即,已经推送)它应该被弹出或推送。
问问题
696 次
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 回答