0

テーブル ビューに 2 列のリストを表示する必要があります。drawRect ( here )をオーバーライドしてグリッドを作成することに関する関連記事をいくつか読みました。ただし、ペン先でIBを使用してセルを設計し、ロードして各行に2つのセルをプッシュする簡単な方法を探しています。drawRect の例は、位置を手動で設定する必要があるため、適切ではありません。これらの 2 つのセルを自動サイズ調整でプッシュする必要があるだけです。出来ますか?

私は(cellForRowAtIndexPathで)次のようなものを探しています:

cell.contentView = emptyUIViewContainer;
[cell.contentView addSubview:FirstColumnUIView];
[cell.contentView addSubview:SecondColumnUIView];

これらの 2 つの列に 2 つの別々のペン先を用意する必要はありません。すべての列は他のデータと同じ形式であるためです。何か案は?

更新:直感的に、私は次のようなことをしようとしています:

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

  static NSString *CellIdentifier = @"Cell";
  UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell1 == nil) {
    cell1 = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
  }
  // Configure the first cell.
  cell1.textLabel.text = ...some text

  // Configure the second cell
  UITableViewCell *cell2 = [[UITableViewCell alloc] init];
  cell2.textLabel.text = ...some text

  //set row as container for two cells    
  UITableViewCell *twoColumnRowView = [[UIView alloc] init]; //initWithFrame:CGRectMake(0, 0, 200, 20)];

  cell1.contentView.frame = CGRectMake(0, 0, 100, 20);
  [twoColumnRowView addSubview:cell1];
  cell2.contentView.frame = CGRectMake(100, 0, 100, 20);
  [twoColumnRowView addSubview:cell2];

  return twoColumnRowView; // cell;
}

それは私が今遊んでいる生のプロトタイプです。しかし、実行時にコードがクラッシュし、「キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-[UIView setTableViewStyle:]: 認識されないセレクターがインスタンスに送信されました」

UPDATE 2.より実用的に見えるようにコードを変更しました。奇妙ですが、何度か試行した後、アプリはクラッシュせずに動作しましたが、すべてのセルに奇妙な黒い背景がありました。コードは次のとおりです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString *FirstCellIdentifier = @"FirstCellIdentifier"; 
  static NSString *SecondCellIdentifier = @"SecondCellIdentifier";

  // initialize first cell
  UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:FirstCellIdentifier];

  if (cell1 == nil) {
    cell1 = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:FirstCellIdentifier] autorelease];
  }

  //initialize second cell
  UITableViewCell *cell2 = [tableView dequeueReusableCellWithIdentifier:SecondCellIdentifier];

  if (cell2 == nil) {
    cell2 = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SecondCellIdentifier] autorelease];
  }

  cell1.textLabel.text = ...data
  cell2.textLabel.text = ...data

  UITableViewCell *twoColumnRowView = [[UITableViewCell alloc] init];

  [twoColumnRowView addSubview:cell1];
  //cell2.contentView.frame = CGRectMake(100, 0, 100, 20);
  [twoColumnRowView addSubview:cell2];

  return twoColumnRowView; // cell;
}

私は twoColumnRowView を再利用していませんが、他の両方で再利用しています。

4

2 に答える 2

1

2 つのテーブル ビューを並べて配置することはできません (少なくとも、すべきではありません)。そして、ご存知のように、テーブル ビューには 1 つの列しかありません。

ただし、各セルには必要なだけデータを入れることができます。

このほとんどは、Interface Builder で実行できます。で XIB を作成しますUITableViewCellUILabelいくつかの を適切な場所にドラッグ アンド ドロップします。メソッドで見つけてラベルを更新することもできますが、各ラベルを指すプロパティをviewWithTag:持つカスタム クラスを作成することをお勧めします。UITableViewCell

テーブルは UIKit の中心であるため、Apple のドキュメント セットや優れた WWDC トークに多くのサンプルがあります。動画はiTunesからダウンロードできます。

于 2011-09-12T08:42:54.437 に答える
0

これがあなたを助けることを願っています...

http://www.iphonedevx.com/?p=153

それ以外の場合、2 つのテーブル ビューを個別にスクロールする必要がある場合は、2 つのテーブル ビューを並べて配置するのが最善の方法です。

これがあなたを助けることを願っています...

于 2011-09-12T08:08:11.597 に答える