テーブル編集モードをオフにした後もまだ表示されているという奇妙な問題がありeditingAccessoryView
ます。UITableViewCell
現在UISwitch
、編集アクセサリビューとしてを使用しており、ナビゲーションバーの編集ボタンが押されたときに、テーブルビューにアニメーション付きの編集ビューのオン/オフ画面の移動を処理させています。
ほとんどすべての編集アクセサリビューは画面外で正しくアニメーション化されますが、画面外に完全に表示されないものが常に2つあり、セルがデキューされて再利用されると再利用されるため、スクロール中に表示されます。
他の誰かがこれを見たことがありますか、それとも私がここで見逃しているものがありますか?
私はこのようにセルを設定しています:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
AllStatCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AllStatCell"];
if (cell.editingAccessoryView == nil) {
UISwitch *statSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
[statSwitch addTarget:self action:@selector(saveSwitchState:) forControlEvents:UIControlEventValueChanged];
cell.editingAccessoryView = statSwitch;
}
NSString *statName = [self statNameForIndexPath:indexPath];
cell.statName.text = statName;
[(UISwitch *)cell.editingAccessoryView setOn:[self switchValueForIndexPath:indexPath withStatNamed:statName]];
if (tableView.editing) cell.statValue.hidden = YES;
return cell;
}
アニメーションが完了するのを許可するために、遅延後にテーブルデータをリロードするメソッドをオーバーライドしようとしsetEditing
ましたが、それは時々しか機能しません
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[super setEditing:editing animated:animated];
// Insert/delete the stat rows depending on editing mode
[self rebuildTableDataAnimated:YES];
double delayInSeconds = 0.5;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
// Trying to fix bug that shows part of a UISwitch on screen still even though editing mode is completed
[self.tableView reloadData];
});
}
スクリーンショットは次のとおりです。