グループ化されたテーブルビューで動的セルと静的セルを混在させようとしています。上部に静的セルがあり、その後に動的セルのセクションが続く2つのセクションを取得したいと思います(下のスクリーンショットを参照してください)。テーブルビューの内容を静的セルに設定しました。
編集
AppleFreakのアドバイスに基づいて、コードを次のように変更しました。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell;
if (indexPath.section <= 1) { // section <= 1 indicates static cells
cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
} else { // section > 1 indicates dynamic cells
CellIdentifier = [NSString stringWithFormat:@"section%idynamic",indexPath.section];
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
}
return cell;
}
しかし、私のアプリはエラーメッセージでクラッシュします
キャッチされなかった例外'NSInternalInconsistencyException'が原因でアプリを終了しています、理由:' UITableView dataSourceはtableView:cellForRowAtIndexPathからセルを返す必要があります:'
セクション0と行0の場合。セクション0と行0の場合に返されるセルcell = [super tableView:tableView cellForRowAtIndexPath:indexPath]
はですnil
。
私のコードの何が問題になっていますか?アウトレットに問題はありますか?私はサブクラス化UITableViewController
しており、テーブルビューを設定するためのアウトレットがないと思われるため、アウトレットを設定していません(?)。それをより良くする方法について何か提案はありますか?
編集II
ストーリーボードでシーンを再作成し(上記の更新されたスクリーンショットを参照してください)、新しいベースから開始するためにビューコントローラーを書き直しました。また、applefreakが提案したように、Appleのフォーラムの説明も読みました。ただし、numberOfSectionsInTableView:tableView
静的セクションの数(2)を1つ増やす方法で、最初の問題を実行します。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [super numberOfSectionsInTableView:tableView] + 1 ; }
アプリがクラッシュし、次のエラーメッセージが表示されました。
キャッチされなかった例外'NSRangeException'が原因でアプリを終了しています。理由:'***-[__ NSArrayI objectAtIndex:]:インデックス2が境界を超えています[0 .. 1] '
Appleとapplefreakの推奨事項に従っているのに、このコードが機能しないのはなぜですか?iOS 6でtableViewが少し変更された可能性はありますか?
解決策:以下の彼の回答にあるAppleFreaksコードサンプルを使用して、これを機能させることができました。ありがとう、AppleFreak!
編集III:セルの選択:
混合(動的セルと静的セル)セルテーブルビューでセル選択を処理するにはどうすればよいですか?いつ電話super
し、いつ電話しself tableView
ますか?使うとき
[[super tableView] selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]
選択したインデックスパスを次のように確認してください。
UITableView *tableView = [super tableView];
if ( [[tableView indexPathForSelectedRow] isEqual:customGrowthIndexPath] ) { .. }
の戻り値を取得しますnil
。
エラーの原因がわからないので、よろしくお願いします。