web-dev-qa-db-ja.com

Interface BuilderでUITableViewControllerにナビゲーションバーを追加するにはどうすればよいですか?

Interface Builderでは、ナビゲーションバーをクリックしてTable View Controllerにドラッグできません!!!とてもイライラします。

必要なのは、編集ボタンを備えたテーブルビューです(インターフェイスビルダーで行います)。これが不可能な場合、プログラム的にnavbarを追加するにはどうすればよいですか?

前もって感謝します。

40
klyngbaek

アウトラインビューから、Table View Controllerが選択されていることを確認します。

次に、Editorメニューに移動し、Embed Inサブメニューをクリックして、Navigation Controllerを選択します。ナビゲーションコントローラーは、リレーションシップが組み込まれたTableViewコントローラーをポイントしています。

51
Greeso

上部に編集ボタンがあるテーブルビューの場合は、UITableViewをrootViewとして使用して、UINavigationControllerを使用します。つまり、テーブルビューのカスタムUITableViewサブクラスを作成し、それをUINavigationControllerインスタンスのrootViewとして使用します。 (プログラム的には、UINavigationControllerの-(id)initWithRootViewControllerで設定されます。IBでも設定可能です。)

次に、UITableViewサブクラスで、次の行のコメントを解除します。

- (void)viewDidLoad {
    [super viewDidLoad];
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

また、UINavigationControllerのビューは、ナビゲーションバーの右側に編集ボタンがあるテーブルビューとして表示されます。

コントローラーはスタックの最上部にあるため、左側に「戻る」ボタンがないため、self.navigationItem.leftBarButtonItem作成したUIBarButtonItemに対応します。

18
stephenhow

Interface Builderでこのようなことを行うのは難しいと思いますが、幸いなことに、この方法でナビゲーションバーとバーボタンアイテムをテーブルビューに追加することができます。方法は次のとおりです。

  1. 空白のビュー(UIViewのインスタンス)をライブラリからテーブルビューの上部近くの領域にドラッグします。ターゲットエリアの近くにドラッグすると、Interface Builderはそれを青で強調表示して、ビューをドロップする場所を示します。手放すと、ビューがテーブルビューのヘッダービューのサブビューとして追加されます。
  2. ライブラリからナビゲーションバーをドラッグし、追加したばかりの空白のビューにドロップします。
  3. ライブラリからバーボタンアイテムをドラッグし、ナビゲーションバーにドロップします。

[〜#〜] edit [〜#〜]

上記のアプローチの問題は、Bogatyrが指摘するように、ナビゲーションバーがテーブルビューと一緒にスクロールすることです。 Appleナビゲーションバーとサイズに合わせてサイズ変更されたUIViewControllerの両方のインスタンスを所有するUITableViewのカスタムサブクラスを使用することをお勧めします。残念ながら、 UITableViewControllerサブクラスに必要なUIViewController動作を自分で実装します。

うまく機能すると思われる別のアプローチは、ナビゲーションバーを含む空白の背景ビューと、適合する空のコンテンツビュー(UIViewControllerのインスタンス)を所有するUIViewのカスタムサブクラスを作成することですナビゲーションバーの下。カスタムサブクラスには、同じnibファイル内のUITableViewControllerのインスタンスを指すアウトレットがあります。

これには、すべてのビューコンポーネントをInterface Builderで作成および構成できるという利点があり、UITableViewControllerメソッドを最初から実装する必要がありません。 Table View Controllerの親で注意する必要があるのは、viewDidLoadの親のコンテンツビューのサブビューとしてTable Viewを追加することだけです。

親は、ナビゲーションバーのボタン項目のアクションメソッドを実装し、必要に応じてデリゲートパターンを実装できます。

12
jlehr

IOS6以降では、コンテナビューを使用できます。そのため、View Controllerを取得してNavigation Barを追加し、同じView ControllerにContainer Viewを追加する必要があります。自動的に、コンテナビューに新しいView Controllerリンクが追加されます。次に、それを削除し、ストーリーボードのTable View Controllerを削除します。次に、コントロールドラッグでTable View Controllerをコンテナビューに埋め込みます。それが役に立てば幸い。

9
cocoaNoob

まず、Navigation Controllerを追加し、Table View Controllerを(ルートView Controllerとして)Navigation Controllerに配置します。私はIBを使用していないため、これはコードで行われています。

4
dasdom

なぜ、File's OwnerをUIViewControllerのサブクラスに設定し、navigationItemをUIViewControllerのnavigationItemアウトレットにフックして、navigationItemを.xibファイルにドラッグできないのはなぜですか。 IB/XCode統合の本当の穴のようです。確かに、ViewControllerのインスタンスをxibファイルにドラッグし、navigationItemをViewControllerにドラッグして、タイトルとbarbuttonitemsをそのように設定できるためです。

したがって、IBでUITableViewControllerサブクラスオブジェクトのナビゲーションバーを定義する場合は、xibファイル(ただし、UITableViewControllerのtableviewを含む1つの.xibファイルではなく!)でTableVCオブジェクトを作成する必要があります。次に、TableVCオブジェクトを別のオブジェクト(アプリケーションデリゲートなど)のアウトレットにフックします。これは、アプリのライフタイム全体でTVCのインスタンスを1つだけ必要とする場合、または動的にインスタンスを作成する場合に機能しますNSBundleクラスのloadNibNamed:owner:optionsメソッドを使用して、この追加の.xibファイルを手動でロードするコード内のTableVC。

3
Bogatyr

次の手順は、iOS 9で機能しました。

  1. ストーリーボードにView Controllerを追加します。 UITableViewControllerを基本クラスとして作成します。
  2. 上部のView ControllerにNavigation Barオブジェクトを追加します。
  3. ナビゲーションバーの下にテーブルビューを追加します。
  4. テーブルビューセルをテーブルビューに追加します。
  5. 制約を追加します。
1
hansengj

これは他のeasy wayです。

  1. ストーリーボードでTableViewController画面を選択します。
  2. 右側のメニューでSize Inspectorシンボルをクリックし、Simulated Sizeを見つけます
  3. 自由形式に修正された変更

ナビゲーションバーを簡単に追加できます。

0
Ahmet Şentürk