【发布时间】:2011-07-23 12:22:05
【问题描述】:
在为 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 控制器
SecondScreenViewController *sVC = [[SecondScreenViewController alloc] init];
sVC.title = @"Screen 2";
[self.navigationController pushViewController:sVC animated:YES];
[sVC release];
上面是将第二个屏幕/视图控制器加载到导航控制器的搜索视图控制器中的代码。但是屏幕 2 顶部的后退按钮中包含单词 screen 2,当我按下它时它会重新加载,然后后退按钮显示搜索(这是第一个屏幕的标题)。这次按下它会回到第一个屏幕。
我只是很困惑为什么后退按钮会显示视图控制器自己的标题名称并重新加载自己。我在这些屏幕中真的没有任何其他代码,它们只是空白屏幕,带有标签显示哪个屏幕在那里,而我正在学习如何正确使用它
【问题讨论】:
-
正如有人在我的一个问题中向我指出的那样,您可以使用 self.navigationController.viewControllers 来查看导航堆栈中的实际内容。也许那里发生了一些可疑的事情。
-
为小费干杯。这表明我的第二个视图控制器以某种方式被加载了两次。现在去追踪它
标签: iphone objective-c interface-builder