我在使用iphone的应用程序时,我的代码中有一个奇怪的错误。我正在创建一个导航控制器并将其放在我的标签栏控制器中,然后当我从初始屏幕移动到辅助屏幕时,辅助屏幕上的后退按钮指向自身。因此当按下后面时它只会重新加载,然后在下次按下它时会回到第一个屏幕。
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 + tab controller
SecondScreenViewController *sVC = [[SecondScreenViewController alloc] init];
sVC.title = @"Screen 2";
[self.navigationController pushViewController:sVC animated:YES];
[sVC release];
以上是搜索视图控制器中的代码,用于将第二个屏幕/视图控制器加载到导航控制器。但是屏幕2顶部的后退按钮中有屏幕2,当我按下它后再重新加载,然后后退按钮显示搜索(这是第一个屏幕的标题)。这次按下它会将它带回第一个屏幕。
我很困惑为什么后退按钮显示视图控制器自己的标题名称并重新加载自身。我真的没有在这些屏幕上有任何其他代码,它们只是空白屏幕,标签显示哪些屏幕在那里我学习如何正确使用它
答案 0 :(得分:1)
指定初始值设定项的UINavigationController的Apple文档
- (id)initWithRootViewController:(UIViewController *)rootViewController
声明:
每个导航堆栈必须至少有一个视图控制器才能充当根。
我建议尝试使用rootViewController初始化UINavigationController
。
答案 1 :(得分:0)
TiltedWindmill,我之前遇到过这个问题。就我而言,在我的脑海里,我想这样做:
(> =推视图控制器)
从MapViewController开始>关于地图上单击的图钉的吸引力的详细信息> MapViewController>然后推送另一个DetailsViewController。
在我的MapViewController中,此视图控制器已注册通知。从理论上讲,我以为我像这张地图一样导航>详细信息视图控制器>地图>细节视图控制器。问题是,每当我点击地图上的图钉时,都会触发通知,导航堆栈上的两个MapViewController副本都会响应通知。
结果它推送了同一个DetailsViewController的两个副本。所以真正的导航是这样的:
地图>详细信息视图控制器>地图>详细信息视图控制器copy1 + DetailsViewController copy2
* GT; =第二个细节视图控制器被推到前一个控制器的顶部,但是眼睛看不到。
当我按下后退按钮时,它会弹出DetailsViewController copy2并显示相同的视图控制器(DetailsViewController copy1)。
我通过告诉我的MapViewController取消订阅事件viewDidDisappear上的通知来修复它。
不确定你是否理解:P