UITableView
設定アプリと同様に、固定された数のセクションを表示することを目的としたグループ化されたスタイルがあり、各セクションには固定された一連のセルがあります。セルはカスタムであり、それらの間で異なります。テキストフィールドを持つものもあれば、スイッチを持つものもあれば、ボタンを持つものもあります。
私は、このシナリオに対処するための 2 つのアプローチについて知っています。
1) IB をUITableViewCell
使用して、同じ nib ファイルにコントロールとサブコントロールを含めます。UITableView
次に、そのセルとそれに含まれるコントロール (textFields、スイッチ、ボタン) のそれぞれにアウトレットを設定し、必要に応じてアクションを設定します。このように、テーブル ビューのcellForRowAtIndexPath:
メソッドは次のようになります。
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = nil;
if (indexPath.section == 0) {
switch (indexPath.row) {
case 0: {
cell = firstCell;
break;
}
case 1: {
cell = secondCell;
break;
}
case 2: {
cell = thirdCell;
break;
}
case 3: {
cell = fourthCell;
break;
}
default:
break;
}
}
else if (indexPath.section == 1) {
switch (indexPath.row) {
case 0: {
cell = fifthCell;
break;
}
case 1: {
cell = sixthCell;
break;
}
default:
break;
}
}
return cell;
}
UITableViewCell
2)私が持っているカスタム セル タイプごとに個別の nib ファイルとサブクラスを作成し、次のコード スニペットのようにロードします。ここでは、テーブル ビューを管理するビュー コントローラーの各セルのプロパティを合成しました。
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = nil;
if (((indexPath.row == 0) && (indexPath.section == 0) && (firstCell == nil))
|| ((indexPath.row == 1) && (indexPath.section == 0) && (secondCell == nil))
|| ((indexPath.row == 0) && (indexPath.section == 1) && (fifthCell == nil))) {
NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"TypeACell" owner:nil options:nil];
for (UIView *view in views) {
if ([view isKindOfClass:[UITableViewCell class]])
{
cell = (TypeACell *)view;
}
}
// Cell contained controls settings
}
else if (((indexPath.row == 2) && (indexPath.section == 0) && (thirdCell == nil))) {
NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"TypeBCell" owner:nil options:nil];
for (UIView *view in views) {
if ([view isKindOfClass:[UITableViewCell class]])
{
cell = (TypeBCell *)view;
}
}
// Cell contained controls settings
}
else {
NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"TypeCCell" owner:nil options:nil];
for (UIView *view in views) {
if ([view isKindOfClass:[UITableViewCell class]])
{
cell = (TypeCCell *)view;
}
}
// Cell contained controls settings
}
return cell;
}
最善のアプローチは何ですか?または、別の方法である可能性があります...それぞれのアプローチには、メモリ管理に関するどのような懸念がありますか? 最初のものでは、IB からセルとそのコントロールのアウトレットを設定すると、セルはプロパティとしてstrong
、そのコントロールはweak
プロパティとして自動的に設定されます。あれは正しいですか?2 番目のアプローチに従う場合、セルのプロパティも に設定する必要がありstrong
ますか? どちらの場合も、既知の固定セルを含むテーブルであっても、セルを再利用する必要がありますか?
私はすでにこの問題についていくつかの調査を行いましたが、明確にしませんでした...
ありがとう!