删除单元格时,表视图单元格背景变为白色 - iOS

时间:2018-03-08 20:58:20

标签: objective-c uitableview uicolor nsindexpath uitableviewrowaction

我有一个带有UITableView的iOS应用程序,我注意到当用户选择Delete按钮时,单元格背景颜色会闪烁白色。

editActionsForRowAtIndexPath方法中,我创建了两个单元格按钮:EditDelete。第一个按钮的样式设置为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];
}

当用户滚动,点击或选择Edit按钮时,单元格的颜色正常,但当他们选择Delete按钮时,单元格会变为白色删除动画正在发生。

我该如何解决这个问题?

谢谢你的时间,Dan。

2 个答案:

答案 0 :(得分:2)

事实证明我遇到的问题是由于iOS错误造成的。我在这里找到了一个解决方案:https://stackoverflow.com/a/46649768/1598906

[[UITableViewCell appearance] setBackgroundColor:[UIColor clearColor]];

以上代码在App Delegate中设置,它将背景颜色设置为clear,从而删除白色背景视图。

答案 1 :(得分:0)

在调用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];
}