web-dev-qa-db-ja.com

ナビゲーションアイテムがViewControllerに表示されない

私はiPhoneプログラミングに不慣れであることをお詫び申し上げます。

マスターディテールのiPhoneアプリケーションを作成しました(ナビゲーションコントローラーがプロジェクトに付属しています)。 masterviewcontrollerのUIBarButtonItemを介して作成した新しいViewControllerにセグエします。ただし、(プロジェクトに付属の)detailviewcontrollerとは異なり、ストーリーボードのシーンリストに表示されていても、ナビゲーションアイテム(またはナビゲーションバー?)をビューに表示できないようです。

ここにいくつかのコードとスクリーンショットがあります:

私のmasterviewcontroller.mでviewdidload()関数

UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"Settings" style:normal target:self action:@selector(goToSettings:)];
self.navigationItem.leftBarButtonItem = settingsButton;

私のmasterviewcontroller.mで

- (IBAction)goToSettings:(id)sender{    
    [self performSegueWithIdentifier:@"SettingsSegue" sender:self];
}

作成した新しいviewcontroller.mクラスのviewDidLoad関数の間にnavigationitemにタイトルを追加しようとしました(これに記載されています Link が、機能しませんでした)

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.navigationItem.title = @"Settings";
    self.navigationItem.leftBarButtonItem = self.editButtonItem;
}

しかし、それでもストーリーボードには表示されます(シーンの下のリストには表示されますが、ビューの表示には表示されません)

だから私の質問は、なぜ今それが表示されているのですか、そしてどうすればそれを取得できますか?マスター/詳細プロジェクトに付属している詳細ビューコントローラーのような戻るボタンが必要です。

編集#1

ナビゲーションコントローラーがnilであり、nilではないかどうかのチェックを追加しました(ifステートメントは入力されません)。また、ナビゲーションアイテムを元に戻して削除しようとしましたが、何も機能しませんでした。

if(self.navigationItem == nil)
{
    [ self.navigationItem init];
}
self.navigationItem.title = @"Settings";
self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;

画像を表示するのに十分な評判を得たので、ナビゲーションアイテムはリストに表示されますが、ビューには表示されないことを示すことができます

enter image description here

12
SRQMarsh

セグエの「スタイル」が原因で、ナビゲーションアイテムが表示されませんでした。

シーンをマスタービューコントローラーから設定ビューコントローラーに移動するセグエは、「モーダル」に設定されました。 「プッシュ」に設定する必要があります。これは、ユーティリティペインのストーリーボードから実行されます

11
SRQMarsh

これを行うことにより、セグエスタイルを変更する必要があります。

  • ストーリーボードでセグエを選択します。
  • (右側のペインのタブにある)属性インスペクターに移動します。
  • Style属性をPushに変更します。

画面が右から左に回転し、ナビゲーションバーがスライドして表示されます。 Modalを使用すると、画面は画面の下から上に移動し、ナビゲーションバーは表示されません。

6
Tchelow

私の場合の問題は、ナビゲーションコントローラーが「最初のビューコントローラー」ではなかったことです。

だから私はこれをしなければなりませんでした

enter image description here

5
Jorge Casariego

ViewDidLoadメソッドにリストされているナビゲーションコントローラーがnilではないことを確認しましたか?

Nil以外のself.navigationItemが正しくあるとすると、self.navigationItem.leftBarButtonItemeditButtonItemに誤って設定しているようです。代わりに、これをすべて一緒に削除してみてください。

それを削除しても問題が解決しない場合は、次を試してください。

self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;
1
heckman

ビューコントローラがナビゲーションコントローラのルートビューコントローラであるかどうかを確認してください。ビューコントローラをモーダルビューコントローラとして直接提示することはできません。ビューコントローラをナビゲーションコントローラのルートビューコントローラとして作成してから、ナビゲーションコントローラをモーダルビューコントローラとして提示する必要があります。

// Create the root view controller for the navigation controller
// The new view controller configures a Cancel and Done button for the
// navigation bar.
YourViewController *addController = [[YourViewController alloc]
                   init];

// Configure the YourViewController.

// Create the navigation controller and present it.
UINavigationController *navigationController = [[UINavigationController alloc]
                         initWithRootViewController:addController];
[self presentViewController:navigationController animated:YES completion: nil];
0