Uitableview UINavigationView问题

Uitableview UINavigationView问题,uitableview,ios4,uinavigationcontroller,mkmapview,Uitableview,Ios4,Uinavigationcontroller,Mkmapview,我在基于选项卡栏的应用程序中构建了导航视图控制器。在控制器中,应用程序显示带有一些注释的地图视图。在导航栏上,有一个栏按钮“列表”。当用户按下按钮时,包含注释列表的表视图将被推入导航堆栈。在表视图中,我还实现了一个自定义的工具栏按钮,如果用户按下按钮,地图视图将弹出到导航控制器中 问题来了,这个应用程序工作得很好,但是如果我按下“列表”按钮,一旦加载了tableview控制器,我就通过按下“地图”按钮返回切换回地图视图,然后像这样切换视图几次。首先视图切换很好,但是在几个圆圈之后(经过几次测试,

我在基于选项卡栏的应用程序中构建了导航视图控制器。在控制器中,应用程序显示带有一些注释的地图视图。在导航栏上,有一个栏按钮“列表”。当用户按下按钮时,包含注释列表的表视图将被推入导航堆栈。在表视图中,我还实现了一个自定义的工具栏按钮,如果用户按下按钮,地图视图将弹出到导航控制器中

问题来了,这个应用程序工作得很好,但是如果我按下“列表”按钮,一旦加载了tableview控制器,我就通过按下“地图”按钮返回切换回地图视图,然后像这样切换视图几次。首先视图切换很好,但是在几个圆圈之后(经过几次测试,这个数字是3),当我再次按下“列表”按钮时,问题显示如下: tableview似乎被推到了堆栈中(从导航栏上显示的后退按钮),但tableview没有显示,它仍然是地图视图。如果现在按下后退按钮,导航控制器中的根视图控制器将显示,但当我想切换回子视图控制器(tableview控制器)时,应用程序将终止

抱歉,我无法在此问题中插入图像,但您可以在此处插入有问题的屏幕截图:

以下是我在视图控制器之间切换的代码:

在导航视图控制器的根视图控制器中:

ListViewController *flipListViewController = [[ListViewController alloc]initWithStyle:UITableViewStylePlain];
AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
UINavigationController *navController = [delegate navigationController];
//Flip Animation
[UIView beginAnimations:nil context:nil];
[navController pushViewController:ListViewController animated:NO];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.7];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:navController.view cache:NO];
[UIView commitAnimations];
[navController release];
[flipListViewController release];
这里我定制了过渡动画。在子视图(表视图控制器)中,我使用以下代码弹出根视图控制器

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.7];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
[self.navigationController popViewControllerAnimated:NO];
[UIView commitAnimations];

似乎您正在使用app Delegate的导航控制器,而您应该使用self.navigationController进行推送和弹出。此外,无需使用动画块,您可以使用modalTransitionStyle获得翻转效果。尝试使用self.navigationController推送viewController。

谢谢!这解决了我的问题。但是你能解释一下为什么应该使用self.navigationController而不是app Delegate的导航控制器吗?我使用app delegate的控制器,因为我看到了一些使用此方法的示例。因为每个选项卡的视图控制器都有一个导航控制器,所以它们是不同的。app delegate导航控制器不适合您的情况,因为默认情况下,您将tabBarController的视图添加到窗口。因此,您需要使用self.navigationController。始终记住,如果每个视图控制器的根控制器都有导航控制器,则每个视图控制器都有导航控制器
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.7];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
[self.navigationController popViewControllerAnimated:NO];
[UIView commitAnimations];