我正在尝试使用导航控制器来推送/弹出视图,但我不希望顶部的栏带有按钮;我自己在做导航用户界面。
所以我在AppDelegate中创建了一个navigationController:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.viewController = [[WSViewController alloc] initWithNibName:@"WSViewController" bundle:nil];
self.window.rootViewController = self.viewController;
self.navController = [[UINavigationController alloc]
initWithRootViewController: self.viewController];
[self.window makeKeyAndVisible];
return YES;
}
然后在我的WSViewController中,我有一个IBAction方法在导航堆栈上推送另一个视图(我已经验证它正确地执行了这个操作;我在堆栈中看到它):
- (IBAction)showInfo:(UIButton *)sender {
if (self.wsInfoViewController == nil) {
WSInfoViewController *wic = [[WSInfoViewController alloc] initWithNibName:@"WSInfoViewController" bundle:nil];
self.wsInfoViewController = wic;
}
[self.navigationController pushViewController:self.wsInfoViewController animated:YES];
}
但是当我点击我的WSViewController中的信息按钮(显示正常)时,我没有看到信息视图显示。
如果我将navigationController设为根控制器,那么当我点击信息按钮时,我做看到wsInfoViewController,但是,我也得到了顶部的导航栏,我没有想!
所以......首先,我错误地认为我可以这样使用导航控制器(即将其用于堆栈目的但根本不用于任何UI)?
其次,如果我没有错,为什么不是我正在推动堆栈显示的视图?我猜这是因为我没有正确地将导航控制器挂到窗口,但我不知道该怎么做。
感谢!!!
伊丽莎白
答案 0 :(得分:0)
所以我想我的答案就是我的问题。也就是说,您必须将导航控制器设置为AppDelegate窗口的根视图控制器才能使用它,否则窗口不会知道它。我的WSViewController仍然是导航控制器的根视图控制器。然后摆脱导航栏,你可以隐藏它。 这是更新后的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.viewController = [[WSViewController alloc] initWithNibName:@"WSViewController" bundle:nil];
// doesn't work!
//self.window.rootViewController = self.viewController;
self.navController = [[UINavigationController alloc]
initWithRootViewController: self.viewController];
// do this instead
self.window.rootViewController = self.navController;
[self.window makeKeyAndVisible];
return YES;
}
要隐藏视图中的导航栏,请在隐藏所需的每个视图中添加以下方法:
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
- (void) viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
到目前为止,这项工作非常有效!