2

編集モードが開始されたら、UITableView によって表示される削除テキストを変更したいと思います。

デリゲート メソッド:

 -(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath 

インデックス パスの deleteButton が初めて表示されたときにのみ呼び出されますが、その下のモデルが変更された場合は、このテキストを更新する必要があります。セクション全体をリロードせずに、このメソッドを再度呼び出すことはできますか? 以下のコードを参照してください。事前にご協力いただきありがとうございます。

    -(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {
      ContainerTableViewCell *cell = (ContainerTableViewCell*)[self.tableView cellForRowAtIndexPath:indexPath];

      if ([cell.editPhotos count] > 0) {
          return [NSString stringWithFormat:@"Delete %d photos", [cell.editPhotos count]];
      } 
      else{
          return @"Delete Section";
      }
   }

ちょっとしたコンテキストでは、UITableViewCell 内にネストされた UICollectionView があり、セルが選択されると通知が送信されます。私はセクションをリロードしようとしました:

 [self.tableView reloadRowsAtIndexPaths:@[[self.tableView indexPathForCell:cell]] withRowAnimation:UITableViewRowAnimationNone];

しかし、これは望ましくありません。なぜなら、テーブルビューでジャンプが発生し、選択が正しく表示されないからです。私も試しました:

 [self.tableView.delegate tableView:self.tableView titleForDeleteConfirmationButtonForRowAtIndexPath:[self.tableView indexPathForCell:cell]];

必死で。これにより正しいメソッドが呼び出されますが、削除テキストは変更されません。

4

2 に答える 2

0

期待どおりに動作する基本的なテストアプリを作成しました。

おそらく、データを取得する方法は最善のアプローチではないと思います。おそらくデキューされたセルに対してクエリを実行しているため、最新の情報が含まれていない可能性があります。

代わりに、データがビュー (コレクション ビュー セルなど) から独立している真の MVC パターンを実現するように努力する必要があります。

于 2013-09-08T18:52:04.340 に答える