0

我正在尝试使用导航控制器来推送/弹出视图,但我不希望顶部带有按钮的栏;我自己在做导航 UI。

所以我在我的 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)?

其次,如果我没记错的话,为什么我推送到堆栈上的视图没有显示出来?我猜这是因为我没有正确地将导航控制器连接到窗口,但我不知道该怎么做。

谢谢!!!

伊丽莎白

4

1 回答 1

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];
}

到目前为止,这工作得很好!

于 2012-05-23T04:29:11.057 回答