Table 删除单元格时查看单元格背景变白 - iOS
Table view cell background goes white when deleting a cell - iOS
我有一个带有 UITableView
的 iOS 应用程序,我注意到当用户 select 按下 Delete
按钮时,单元格背景颜色闪烁白色。
在 editActionsForRowAtIndexPath
方法中,我创建了两个单元格按钮:Edit
和 Delete
。第一个按钮的样式设置为 UITableViewRowActionStyleNormal
。但是第二个按钮的样式设置为 UITableViewRowActionStyleDestructive
- 我注意到只有当样式设置为破坏性时才会出现此问题。有谁知道为什么会这样?
这是我用来设置单元格操作按钮的方法:
-(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
// Create the table view cell edit buttons.
UITableViewRowAction *editButton = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"Edit" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
// Edit the selected action.
[self editAction:indexPath];
}];
editButton.backgroundColor = [UIColor blueColor];
UITableViewRowAction *deleteButton = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Delete" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
// Delete the selected action.
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}];
return @[deleteButton, editButton];
}
当用户滚动、点击或 he/she select 按下 Edit
按钮时,单元格的颜色是正常的,但是当他们 select Delete
按钮,单元格变为白色,出现删除动画。
我该如何解决这个问题?
在调用deleteRowsAtIndexPaths方法之前,您需要从数据源中移除该对象;
替换为:
UITableViewRowAction *deleteButton = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Delete" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
// Delete the selected action.
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}];
像这样:
UITableViewRowAction *deleteButton = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Delete" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
// Delete the selected action.
[self deleteObjectAtIndexPath:indexPath];
}];
及删除方法:
- (void)deleteObjectAtIndexPath:(NSIndexPath *)indexPath {
// remove object from data source. I assume that you have an array dataSource, or change it according with your data source
[self.dataSource removeObjectAtIndex:(indexPath.row)];
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
事实证明,我遇到的问题是由 iOS 错误引起的。我在这里找到了解决方案:
[[UITableViewCell appearance] setBackgroundColor:[UIColor clearColor]];
以上代码是在App Delegate中设置的,将背景颜色设置为clear,从而去掉了白色背景view。
我有一个带有 UITableView
的 iOS 应用程序,我注意到当用户 select 按下 Delete
按钮时,单元格背景颜色闪烁白色。
在 editActionsForRowAtIndexPath
方法中,我创建了两个单元格按钮:Edit
和 Delete
。第一个按钮的样式设置为 UITableViewRowActionStyleNormal
。但是第二个按钮的样式设置为 UITableViewRowActionStyleDestructive
- 我注意到只有当样式设置为破坏性时才会出现此问题。有谁知道为什么会这样?
这是我用来设置单元格操作按钮的方法:
-(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
// Create the table view cell edit buttons.
UITableViewRowAction *editButton = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"Edit" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
// Edit the selected action.
[self editAction:indexPath];
}];
editButton.backgroundColor = [UIColor blueColor];
UITableViewRowAction *deleteButton = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Delete" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
// Delete the selected action.
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}];
return @[deleteButton, editButton];
}
当用户滚动、点击或 he/she select 按下 Edit
按钮时,单元格的颜色是正常的,但是当他们 select Delete
按钮,单元格变为白色,出现删除动画。
我该如何解决这个问题?
在调用deleteRowsAtIndexPaths方法之前,您需要从数据源中移除该对象;
替换为:
UITableViewRowAction *deleteButton = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Delete" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
// Delete the selected action.
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}];
像这样:
UITableViewRowAction *deleteButton = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Delete" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
// Delete the selected action.
[self deleteObjectAtIndexPath:indexPath];
}];
及删除方法:
- (void)deleteObjectAtIndexPath:(NSIndexPath *)indexPath {
// remove object from data source. I assume that you have an array dataSource, or change it according with your data source
[self.dataSource removeObjectAtIndex:(indexPath.row)];
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
事实证明,我遇到的问题是由 iOS 错误引起的。我在这里找到了解决方案:
[[UITableViewCell appearance] setBackgroundColor:[UIColor clearColor]];
以上代码是在App Delegate中设置的,将背景颜色设置为clear,从而去掉了白色背景view。