テーブル ビューに 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 を再利用していませんが、他の両方で再利用しています。