1

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;
}

UITableViewCell2)私が持っているカスタム セル タイプごとに個別の 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ますか? どちらの場合も、既知の固定セルを含むテーブルであっても、セルを再利用する必要がありますか?

私はすでにこの問題についていくつかの調査を行いましたが、明確にしませんでした...

ありがとう!

4

2 に答える 2

0

私は個人的に、この種の静的テーブル ビューに関しては、無料のSensible TableViewフレームワークで大きな成功を収めました。

于 2013-07-10T18:41:43.173 に答える