2011-10-23 17 views
11

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

私はViewControllerをクラスが適切TableViewControllerに設定されていると私は、このコンセントにカスタムセルを接続した

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

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

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

私はこれで間違っトンがあると確信しているが、私はただ一つのセルを表示し、そこから行くしようとしている

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

を持っています。ストーリーボードを通じてIB内にカスタムセルを作成する例はありません。私はまだxibファイルを作成してmainBundleにロードする古い方法を使用できますが、私はちょうど最新の状態にしたいと思っています。

しかし、私は上記のビューコントローラを読み込むとクラッシュすることがあります。 SIGABRT

答えて

13

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

+1

うん。それはそれです。なぜ私はあなたにこれをするように言われたすべてのガイドが見つからなかったのか分かりません。はるかに簡単になります。 – Doug

+1

ランダムな質問として、静的セルを使用しているのは、IBで指定したセルの量が正確であることを意味していますか?データソースメソッドを実装する必要がないので、テーブルビューのデータを変更することはできないと思います。 – Warkst

+0

@Warkst - 正確に。実際には、データソースメソッドのスタブ実装を削除する必要があります。 – jrturton

27

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

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

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

+1

これはすべて当てはまりますが、問題はプロトタイプを使用しないスタティックテーブルビューです。 – jrturton

+0

私は新しいシナリオを持っています(疑い)。私が '+'、 ' - 'ボタンと 'UITextField'を含むカスタムセルを持つ' UITableView'を持っているとします。すべてのセットアップはあなたの段落#2に従って既に行われていますが、もし私の細胞が再利用されないようにしたいのであれば、それを行う良い方法がありますか?私はそれをするべきですか? (私は複数の電子メールIDを追加する機能を望んでいます) – thesummersign

+0

@jrturtonああ、しかし、静的な部分を実現することなく、Googleの検索から届いたものもあります。タイトルは少し誤解を招く。だから*この*答えは実際に私が探していたものでした。 –

4

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; 
} 
関連する問題