4

次のView Controller階層があります:

  • ビューコントローラー VC1
  • Tab Bar Controller TBC1 - Table View Controller TVC1 と Map View Controller MVC1 につながるようにストーリーボードで構成
  • テーブル ビュー コントローラー TVC1
  • テーブル ビュー コントローラー TVC2

VC1 では、次のようにします。

[self.navigationController pushViewController:TBC1 animated:YES];

これにより、TVC1 がフォーカスされたタブ バー コントローラーが適切に表示されます。

TVC1 はナビゲーション バー (VC1 コードからプログラムで作成) に [戻る] ボタンを表示します。これにより、VC1 に移動できます。

ただし、TVC1 以降、TVC2 へのナビゲーションがもう 1 つ必要です。このために TVC1 ナビゲーション バーに右ボタンを追加しようとしていますが、表示されません。

TVC1で使用するコードは次のとおりです(rightButtonはTVC1のUIButtonタイプのプロパティです):

   self.rightButton = [[UIBarButtonItem alloc]
                            initWithBarButtonSystemItem: UIBarButtonSystemItemAdd
                            target: self
                            action: @selector(MySelector:)];
   self.rightButton.style = UIBarButtonItemStyleBordered;
   self.rightButton.title = @"";
   self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:   self.rightButton, nil];

(これが原因であるかどうかを確認するために、空白のタイトルとスタイルを指定しました。実際にはこれらの値は必要ありません)

MySelector は、TVC1.h で次のように宣言されています。

- (void) MySelector:(id)sender;

また、適切に実装されています。

しかし、上記の rightButton は TVC1 ナビゲーション バーには表示されません。

私は何が欠けていますか?VC1 と TVC1 の間にある TBC1 (タブ バー) が原因で、ナビゲーション プロパティがリセットされていると思われます。

しかし、TVC1 にナビゲーション バーが表示され、VC1 につながる左ボタンが表示されると主張します。TBC1 で、self.navigationItem.rightBarButtonItems に 1 つのオブジェクトが含まれていることを確認しました。これは、間違いなく追加している rightButton です。

どこが間違っていますか?

注: 上記は、iOS 5.0、5.1、および 6.0 シミュレーターのすべてに見られます。

4

2 に答える 2

6

ストーリーボードの TVC1 と TVC2 の間に UINavigationController が欠けているようです。ストーリーボードを使用している場合は、ナビゲーション コントローラー自体にナビゲーション アイテムの追加ボタン タイプを作成し、TVC2 への PUSH セグエを作成できます。それが理にかなっている場合は、この図を参照してください。これで問題が解決しない場合は、サンプル コードをアップロードしてください。確認します。

[編集]

ストーリーボードにビュー コントローラー構造を作成することで、問題を再現しました。

絵コンテ

ここで TVC1 には UINavigationController がありませんが、VC1 から継承しています。問題の解決策は、rightButton を self に追加するのではなく、self.parentViewController に追加することです。TVC1 に rightButton が表示されます。ただし、TBC1 の親に属しているため、MVC1 にも表示されることに注意してください。必要ない場合は、MVC1 の viewWillAppear で右バー ボタンを非表示にすることができます。以下はコードです。

self.rightButton = [[UIBarButtonItem alloc]
                    initWithBarButtonSystemItem: UIBarButtonSystemItemAdd
                    target: self
                    action: @selector(MySelector:)];
self.rightButton.style = UIBarButtonItemStyleBordered;
self.parentViewController.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects: self.rightButton,nil];

TVC1 のナビゲーション コントローラーに右ボタンを追加する場合は、TVC1 を UINavigationController に埋め込む必要があります。これを行うには、ストーリーボードで TVC1 画面 -> エディター -> 埋め込み -> ナビゲーション コントローラーを選択します。これを行うと、コードも機能し、右ボタンが表示されますが、ストーリーボードの構造により、2 つのナビゲーション コントローラー (下の画像を参照) が含まれます。親のナビゲーション コントローラーを TVC1 のビューに非表示にし、読み込まれた左ボタンで Parentview Controller にポップする必要があります。MVC1 でも同じことを行います。

お役に立てれば!ハッピーコーディング:)

出力

于 2012-10-31T20:21:53.323 に答える
0

最近 Swift で同じ問題が発生し、navigationController に子ビューを埋め込むことが、rightBarButtonItems にアクセスできる正しい方法であることがわかりました。

于 2016-08-31T09:02:03.547 に答える