2011-07-23 87 views
0

当我的iPhone应用程序工作时,在我的代码中有一个奇怪的错误。我正在创建一个导航控制器并将其放在我的标签栏控制器中,然后当我从初始屏幕移动到第二屏幕时,第二屏幕上的后退按钮指向自身。所以当按下后面它只是重新加载自己,然后下一次按下它回到第一个屏幕。uinavigationcontroller后退按钮重新加载当前加载的屏幕

UINavigationController *nav1 = [[UINavigationController alloc] init]; 

// create the initial views for each nav controller 
SearchViewController *searchView = [[SearchViewController alloc] init]; 
searchView.title = @"Search"; 


//place all the viewcontrollers on the nav controllers ready to view 
[nav1 pushViewController: searchView animated:NO]; 


//create tab bar out of above nav controllers 

UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"Search" image:[UIImage imageNamed:@"search.png"] tag:0]; 
nav1.tabBarItem = item; 

UITabBarController *tbc = [[UITabBarController alloc] init]; 
     tbc.viewControllers = [NSArray arrayWithObjects:nav1, nil]; 
    //  
[nav1 release]; 

上面的代码是在对的appdelegate NAV +标签控制器

SecondScreenViewController *sVC = [[SecondScreenViewController alloc] init]; 

sVC.title = @"Screen 2"; 
[self.navigationController pushViewController:sVC animated:YES]; 
[sVC release]; 

的初始设置之上是在加载所述第二屏幕/的ViewController到导航控制器搜索视图控制器的代码。但屏幕2顶部的后退按钮在屏幕2中有单词屏幕2,当我按一次它重新加载自身,然后后退按钮说搜索(这是第一屏幕的标题)。这次按它将它带回到第一个屏幕。

我只是困惑为什么后退按钮显示视图控制器自己的标题名称并重新加载自己。我没有在这些屏幕的任何其他代码真的,它们与显示该屏幕的标签只是空白屏幕是那里,而我学习如何使用它正确

+0

正如有人好心在我的问题一个向我指出,你可以使用self.navigationController.viewControllers,看看你确实有你的导航堆栈。那里可能有些腥意。 – Monolo

+0

为提示而欢呼。这表明我不知何故我的第二个视图控制器被加载两次。现在来追踪那个 – TiltedWindmill

回答

1

在苹果文档的UINavigationController的指定初始化

- (id)initWithRootViewController:(UIViewController *)rootViewController 

它指出:

每个导航堆栈必须至少有一个视图控制器充当根。

我建议尝试用rootViewController初始化UINavigationController

0

TiltedWindmill,我以前遇到过这个问题。就我而言,在我的头上,我想这样做:

(> =推视图控制器)

开始在的MapViewController>详细信息关于一个景点的地图上点击针>的MapViewController>然后推另一DetailsViewController。

在我的MapViewController中,此视图控制器已注册通知。理论上,我认为我正在像这个Map> Details View Controller> Map> Details View Controller一样进行导航。事情是,每当我点击地图上的引脚时,通知被触发,导航堆栈上的MapViewController的两个副本都响应通知。

因此,它推送了相同DetailsViewController的两个副本。所以,真正的导航是这样的:

地图>详细信息视图控制器>地图>详细信息视图控制器COPY1 + DetailsViewController COPY2

*> =第二细节视图控制器推ontop的前一个,但到不可见眼。

当我去按后退按钮时,它弹出DetailsViewController copy2并显示相同的视图控制器(DetailsViewController copy1)。

我通过告诉我的MapViewController取消订阅事件viewDidDisappear上的通知来修复它。

不知道你是否了解,:P

相关问题