10

UITableView(ではなく、Table View Controllerのビュー内のTableView )を追加し、そのコンテンツを"Dynamic Prototype"に設定する方法はありXIB fileますか?

UITableViewこれは、 内のビュー コントローラにを追加するときに正常に機能しstoryboardます。ただし、XIB ファイルで同じことを実行しようとすると、その内容を に設定できません"Dynamic Prototype"

4

2 に答える 2

6

アップデート

最近これについて考えてみると、この問題に対するかなり単純な解決策があります。それは、コンテナー ビュー パターンを使用することです。

  1. 基本的に、コンテナー ビューを xib (またはストーリーボード) に追加します。
  2. コンテナ ビューにデフォルトでアタッチされているビュー コントローラを選択します。
  3. 選択したView Controllerを削除し、法線uitableviewcontrollerをIBキャンバスにドラッグします。
  4. 次に、コンテナ ビューから に Control キーを押しながらドラッグしuitableviewcontroller、使用可能なセグエ タイプから [埋め込み] を選択します。
  5. コンテナー ビューのサイズを好みに合わせて変更し、テーブル ビュー コントローラー用の適切なコード ファイルを作成します。
  6. uitableviewcontroller別のストーリーボード/xib にリファクタリングします。

- テーブル ビュー コントローラーは、コンテナー ビューをコードで保持するビュー コントローラーの子ビュー コントローラーとしてアクセスできます。

なぜこれが正しいパターンなのですか?1 絵コンテ、1 コントローラー。TableView は、別個のコントローラーを保証するのに十分なほど複雑であるため、独自のコントローラーを持っています。コンテナー ビュー パターンを使用すると、単一の責任パターンを維持できます。コントローラーの肥大化を防ぎます。

元の回答の回避策

テーブルビューのサイズを変更すると、落とし穴に注意してください。xml は Xcode によって再生成され、属性を再度追加する必要があります。この編集がバージョン 9.3 以降でも機能することを確認しました。サンプル スタブはhttps://github.com/mingsai/test-stub-tableviewdynamic-inxib.gitで入手できます。

元の回答

  1. ファイルナビゲーターを開く
  2. YourCustomView.xib ファイルを右クリックします。
  3. 名前を付けて開く > ソースコード

開く

  1. で始まる XML を検索します。

テーブルビュー-xml

  1. XMLtableviewタグ内で style 属性を見つけます
  2. スタイルタグの前にスペースを空けて貼り付けます dataMode="prototypes"
于 2017-12-31T12:53:03.193 に答える
3

これについて 100% 確信があるわけではありませんが、XIB ファイルで UITableView コンテンツを「動的プロトタイプ」に設定する方法はないと思います。

ただし、UITableViewCellのみを含む「MyTableViewCell.xib」などと呼ばれる別のXIBファイルを作成し、セルに識別子を与え、ファイルの所有者に移動し、IDインスペクターで同じView Controllerに設定することで、同じ機能を実現できますクラスをテーブル ビュー xib として作成し、次のようにビュー コントローラーで IBOutlet を作成します。

 @property (nonatomic, assign) IBOutlet UITableViewCell *customCell;

次に、XIB でファイルの所有者をクリックし、コントロールを押しながら uitableviewcell にドラッグし、セルのアウトレットを「customCell」プロパティに設定します。

(グラフィック エディターの左下隅にある円の中にある再生ボタンのようなボタンを見つけてクリックし、その列でドラッグすると、これははるかに簡単に実行できます)。

結局のところ、cellForRowAtIndexPath で次のようなコードを使用します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    static NSString *CellIdentifier = @"CustomCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell" owner:self options:nil];

        cell = customCell;
    }

    // Other cell configurations....
}

それが理にかなっていて、あなたのニーズに合っていることを願っています!

于 2013-07-27T21:31:11.343 に答える