我正在尝试使用UINavigationController,但我不知道如何。到目前为止(大约一年),我一直在使用presentModalViewController和dismissModalViewController来呈现/关闭视图控制器。
所以,这就是我所做的。我的主视图控制器(第一个在启动时显示)称为MainViewController,它扩展了UIViewController。
所以我在我的app delegate中创建了这个启动函数:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
MainViewController *controller = [[MainViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller];
[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
return YES;
}
在我的MainViewController的viewDidLoad方法中:
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"Title";
self.navigationController.navigationBar.tintColor = [Constants barColor];
....more code...
}
但是,在我的MainViewController中,我想呈现另一个名为SecondViewController的视图控制器,它需要带有后退箭头按钮的UINavigationBar。那么我是否通过在viewDidLoad方法中设置title和backButton来使SecondViewController扩展UIViewController并执行相同的操作?我该如何呈现呢?我该怎么做才能做到这一点?
答案 0 :(得分:1)
您需要设置一个根视图控制器,从Apple模板开始最简单。
这就是魔术发生的地方:
UIViewController *controller = [[UIViewController alloc] initWithNibName:@"MyNib" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
[controller release];
导航控制器为您完成所有工作(后退按钮,标题,动画) - 它会跟踪!
我的工作流程是:
在viewDidLoad中设置MutableArray,向其添加控制器,例如:
NSMutableArray *array = [[NSMutableArray alloc] init];
MyCustomViewController *customView = [[MyCustomViewController alloc] initWithNibName:@"nib" bundle:@"nil"];
customView.title = @"Second Level";
[array addObject:customView];
self.controllers = array;
然后在你的代表中:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger row = [indexPath row];
UIViewController *childControllerToBe = [controllers objectAtIndex:row];
[self.navigationController pushViewController:childControllerToBe animated:YES];
}
通过阅读一本不错的初学者书籍,例如Beginning iPhone Development
,可以学到更多内容。此外,apple docs总是很好:)
答案 1 :(得分:1)
UINavigationController是UIViewController的子类,但与UIViewController不同,它通常不适合您进行子类化。这是因为导航控制器本身很少在导航栏的视觉效果之外进行自定义。可以相对容易地在代码或XIB文件中创建UINavigationController的实例。 请访问“How to add UINavigationController Programmatically”
答案 2 :(得分:0)
您应该将其推入导航堆栈。
斯坦福大学的iPhone课程Lecture将教你很多关于导航栏的知识。 (这是一个快速阅读)
基本上它的核心是你需要这个代码:
[self.navigationController pushViewController:SecondView];
您可以使用PopViewController以编程方式返回,但会自动创建后退按钮。
这是讲座中的一些source code。它涵盖了您遇到的问题。