0

2 つの目的で使用したいアイテムの詳細ビューがあります。

1) 新しいアイテムを作成する 2) 既存のアイテムを編集する

編集時に、ビューはナビゲーション スタックにプッシュされ、その親からナビゲーション バーを取得します。

アイテムの作成時に、ビューをモーダルに表示したいのですが、上部に「完了」ボタンと「キャンセル」ボタンのあるナビゲーション バーがまだあります。

私が望んでいないのは、ビューに 2 つのナビゲーション バーがあるか、まったく表示されないことです。

これをどのように実装しますか?

4

1 に答える 1

0

これを達成するために、私は:

ビューからナビゲーション バーを削除しました。モーダルで起動するときは、最初にナビゲーション コントローラーを作成し、ルート ビューとしてナビゲーション コントローラーをモーダルに表示します (他のものをスタックにプッシュするつもりはありませんでしたが)。これを変更しました:

StoreDetailView *storeDetailView = [[StoreDetailView alloc] initWithNibName:@"StoreDetailView" bundle:nil];
// ... configure the view, including setting delegate...
[self presentViewController:storeDetailView animated:YES completion: nil];

これに:

StoreDetailView *storeDetailView = [[StoreDetailView alloc] initWithNibName:@"StoreDetailView" bundle:nil];
// ... configure the view, including setting delegate...
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:storeDetailView];
[self presentViewController:navController animated:YES completion: nil];

次に、StoreDetailView で、デリゲートが設定されているかどうかに基づいて、ナビゲーション バーがどのように見えるかを決定します。

if (self.delegate == nil) {
    self.navigationItem.rightBarButtonItem = [self editButtonItem];
} else {
    [self setEditing:TRUE];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel:)];
}
于 2012-08-10T01:18:43.053 に答える