7

テーブルが編集されているかどうかによって、セルの作成方法が異なるテーブルビューがあります。具体的には、選択スタイルは、編集モードの場合はnone、編集モードでない場合は青になります。

あるセルから別のセルに移行すると、一部のセルが更新されていないことに気付きました。少しログを記録すると、セルの外観が大幅に変化しても(たとえば、アクセサリビューが正しく追加/削除されても)、テーブルビューでは選択スタイル(さらにはテキスト)が更新されないことがわかります。

ここで何が起こっているのですか?setEditingが呼び出されたときに、セルの一部の属性のみが更新されますか?おそらく、別のビュースタイル(たとえば、EditingAccessoryType)の割り当てを許可する特定のメソッドを持つものだけですか?私はEditingSelectionStyleの恩恵を受けると思います。

どうすれば解決できますか?setEditingをカスタマイズして、各セルのselectionStyleを変更しますか?これを行うためにテーブルビューをどのように繰り返すかさえわかりません。私が使用しているアニメーションがあるため、reloadDataはオプションではありません。

4

3 に答える 3

8

setEditing: をカスタマイズして、表示されているセルを反復処理し、それぞれの selectionStyle を設定すると問題なく動作することがわかりました。

- (void)setEditing:(BOOL)editing animated:(BOOL)animated{   
    [super setEditing:editing animated:animated];

    for (UITableViewCell *cell in [self.tableView visibleCells]) {
            NSIndexPath *path = [self.tableView indexPathForCell:cell];
            cell.selectionStyle = (self.editing && (path.row > 1 || path.section == 0)) ? UITableViewCellSelectionStyleNone : UITableViewCellSelectionStyleBlue;
    }
}
于 2012-05-03T18:58:20.937 に答える
2

UITableViewDelegate のドキュメントを見ると、編集動作をカスタマイズする方法が 5 つあります。方法もあります

    - (BOOL)tableView:(UITableView *)tableView 
canEditRowAtIndexPath:(NSIndexPath *)indexPath

編集モードに入る前に各セルで呼び出されるUITableViewDataSourceドキュメントで。同じことが当てはまります

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView 
           editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

編集可能なすべてのセルに対して呼び出されます。セルの外観を変更したい場合は、これらのいずれかで行うことができます。(実装しないcanEditRow..場合、すべての行が編集可能であると想定されます。)


また、セルをスワイプするなど、編集モードに入る方法が他にもある場合があることに注意してください。

             - (void)tableView:(UITableView *)tableView 
willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath

スワイプしたセルに対して呼び出されます。

この「スワイプして削除」編集モードに入ると、テーブル ビューは tableView:willBeginEditingRowAtIndexPath: メッセージをデリゲートに送信して、ユーザー インターフェイスを調整できるようにします。

于 2012-05-01T09:23:21.410 に答える
1

これは Swift 2.3 で機能し、カスタム セル サブクラスの setEditing メソッドを上書きするだけです。

class MyCell: UITableViewCell {

    override func setEditing(editing: Bool, animated: Bool) {
        super.setEditing(editing, animated: animated)
        //Place your code here...
    }

}
于 2016-12-20T03:22:11.037 に答える