web-dev-qa-db-ja.com

UITableViewControllerのTableViewを別のビューに追加できますか?

UITableViewControllerとそれに対応するUITableViewを単純なIBドキュメントに挿入しました。目標は、UITableViewを親UIWindow(またはUIView)内に、テーブルを飾る他の「もの」(実際には何でも)とともに含めることです。 InterfaceBuilderでは次のようになります。

enter image description here

私はこれを何度も試しましたが、いつも同じ場所に行きます。

  1. データで満たされたUITableViewControllerの作業サブクラスを構築します
  2. UTableViewとそのセル(タップターゲットを含む)をカスタマイズします
  3. 新しく作成したUITableViewControllerをIBドキュメントに追加します
  4. UITableViewをUITableViewControllerからメインUIViewにドラッグします
  5. UITableViewControllerをUITableViewに接続します
  6. 注:コードにUITableViewControllerを追加すると、同じ問題が発生します

IPhoneエミュレーターまたはデバイスでアプリを実行すると、テーブルは正しく表示されますが、最初に操作しようとするとクラッシュします。スクロール、タップ、何かがアプリをクラッシュさせます。 UITableViewがUITableViewControllerに通信する方法を知らないなど、これはデリゲートの問題のようですが、問題を修正する方法がわかりません。

これまでのところ、tableHeaderViewをカスタマイズして十分なレイアウトを取得することで解決できましたが、他の手法を使用したいと思っています。

31
Dan Harrelson

あなたは正しい方向に進んでいます!これがあなたがする必要があることです:

  1. 付随するビューxibを使用して標準のUIViewControllerサブクラスを作成します。

  2. XIBにUITableViewを追加します。

  3. すべてを配線します。ビューコントローラはテーブルのデリゲートとデータソースになるため、両方のプロトコルを実装する必要があります。

  4. 実装ファイルに、テーブルビューに必要なすべてのデータソースとデリゲートメソッドを追加します。

    (UITableViewCell *)tableView:(UITableView *)tv
        cellForRowAtIndexPath:(NSIndexPath *)indexPath
    

ヘッダーファイルは次のようになります。

MyViewController.h

@interface MyViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
    IBOutlet UITableView *myTableView;
    //This outlet is only necessary if you need to send messages to the table view (such as reloadData)
}
@end

それで十分です!

32
Reed Olsen