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 に答える