web-dev-qa-db-ja.com

ストーリーボード内にカスタムUITableViewCellを作成する

静的メニュー(IOS 5)を作成し、ストーリーボード内にカスタムセルを作成して、グループ化されたテーブルビューにロードしようとしています。

アウトレットを作成しました

@property(nonatomic,strong) IBOutlet UITableViewCell *labelCell;

ViewControllerクラスは適切なTableViewControllerに設定されており、カスタムセルをこのコンセントに接続しました。

デリゲートとデータソースも設定しています。

私が持っている

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath   *)indexPath
{
  return self.labelCell;
}

これにはかなりの間違いがあると思いますが、私は1つのセルを表示して、そこから移動しようとしています。ストーリーボードを介してIB内でカスタムセルを実行する例はないようです。 xibファイルを作成してmainBundleにロードする古い方法を引き続き使用できますが、最新の状態に保ちたいと思います。

しかし、上記のものでは、このViewControllerをロードするとクラッシュします。 SIGABRT

11
Doug

ストーリーボードで「静的セル」を使用するようにUITableViewを設定している場合は、UITableViewDataSourceメソッドを実装する必要はなく、InterfaceBuilderでセルを直接変更できます。単一のラベルセルの場合、セルを選択し、そのタイプを「基本」に変更します。これで、他のビューオブジェクトと同じようにセルを編集できます。

13
Mark Adams

ストーリーボードを使用するときにテーブルのセルを取得する方法について私が学んだことは次のとおりです。 UITableViewをビューにドラッグすると、サブビューとして既に設定されているプロトタイプセルが付属しています。このプロトタイプセルを使用するには、属性インスペクターで一意の再利用識別子を設定してから、同じ識別子を使用してcellForRowAtIndexPath:メソッドのセルをデキューします。 dequeue呼び出しがnilを返す場合、セルを最初から作成するためのコードを省略します。私はそれが起こり得るとは思わない。したがって、セルをデキューし、通常のUITableViewCellメソッドを使用して構成し、それを返します。

ただし、UITableViewCellのカスタムサブクラスを作成することもできます。ストーリーボードのクラスIDインスペクターでクラス名を設定し、必要な要素をオブジェクトパレットからセルにドラッグするだけです。次に、サブクラスのコードファイルにそれらのIBOutletプロパティを作成し、通常の方法でストーリーボードのセルに接続します。これは、すべてをコードで実行するよりもはるかに優れています。

そして最後に、テーブルに複数の種類のセルを含めることができます。 UITableViewCellオブジェクトをパレットからテーブルにドラッグし、属性インスペクターで各オブジェクトに一意の再利用識別子を指定するだけです。 cellForRowAtIndexPath:メソッドで、各セルのタイプを選択すると、非常に柔軟なテーブルビューを作成できます。

27
David Casseres

This チュートリアルは私に役立ちました。タグを使用して、必要なオブジェクトを参照できます。

ストーリーボードでUIImageViewまたはUILabelなどをドラッグし、タグを100(必要なもの)に設定してから、- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPathでタグを使用して参照します。

チュートリアルのサンプルコードは次のとおりです。ストーリーボードにタグを設定することを忘れないでください。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

// Configure the cell...
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

// Display recipe in the table cell
Recipe *recipe = [recipes objectAtIndex:indexPath.row];
UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
recipeImageView.image = [UIImage imageNamed:recipe.imageFile];

UILabel *recipeNameLabel = (UILabel *)[cell viewWithTag:101];
recipeNameLabel.text = recipe.name;

UILabel *recipeDetailLabel = (UILabel *)[cell viewWithTag:102];
recipeDetailLabel.text = recipe.detail;

return cell;
 }
4
SirRupertIII