UITableViewCell 删除按钮没有消失

Posted

技术标签:

【中文标题】UITableViewCell 删除按钮没有消失【英文标题】:UITableViewCell delete button not disappearing 【发布时间】:2013-11-30 20:08:59 【问题描述】:

我正在使用UISegmentedControl 在两个数据集之间切换UITableView(想想最喜欢的和最近的)。点击分段控件会使用不同的数据集重新加载 tableview。

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:anim];

当用户滑动删除一行时,它可以正常工作。 HOWEVER 当用户通过分段控件切换数据集时,DELETED CELL 会在不改变其外观的情况下被重新使用(即红色的“DELETE”按钮仍然存在并且行内容无处可见) .这似乎与大多数人看到的相反问题是删除按钮没有出现。

这是删除代码:

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

    return UITableViewCellEditingStyleDelete;


- (void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

    if (editingStyle == UITableViewCellEditingStyleDelete)
    
        if ([self.current isEqualTo:self.favorites])
        
            Favorite *fav = self.favorites[indexPath.row];

            NSMutableArray *mut = [self.favorites mutableCopy];
            [mut removeObjectAtIndex:indexPath.row];
            self.favorites = mut;
            self.current = self.favorites;
            [self.tableView deleteRowsAtIndexPaths:@[indexPath]
                                  withRowAnimation:UITableViewRowAnimationAutomatic];
        
    


tableview 设置为单选,self.tableView.editing == NO。我还尝试使用[self.tableView reloadData] 并删除/插入从一个数据集到下一个数据集的行差异。两者都不起作用。

我使用的 UITableViewCell 没有 backgroundViewselectedBackgroundView


[编辑]

分段控制值已更改:

- (IBAction)modeChanged:(id)sender

    if (self.listMode.selectedSegmentIndex == 1)
    
         self.current = self.favorites;
    
    else 
    
        self.current = self.recents;
    
    // Tryin this:
    [self.tableView reloadData];
    // Tried this:
    // [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];


// Only 1 Section per table
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

    return [self.current count];

【问题讨论】:

更新您的问题以包含您处理分段控件中的更改和重新加载表格的代码。 @rmaddy 我已经添加了代码 - 它相对简单。 尝试在调用reloadData之前调用self.editing = NO self.editing 永远不会改变......它总是NO 这是UITableViewController吗?是self.editing 没有设置然后检查self.tableView.editing 【参考方案1】:

哦,为了爱……

我没有在我的 UITableViewCell 子类中调用 [super prepareForReuse];

哎呀。

【讨论】:

我遇到了一个听起来非常相似的问题......但我没有覆盖prepareForReuse,事实上我为我的reuseIdentifier指定了nil,所以根据文档,它会无论如何都不会被调用。 啊哈——这是在正确的轨道上。但为了清楚起见,我会将我的发现作为单独的答案发布。 正是我的问题。感谢您节省了我头上的一些头发! 为我加油。我省略了对 super 的调用。非常感谢!【参考方案2】:

我遇到了同样的事情:为了“删除”一个自定义 UITableViewCell,我将它从表格中删除并将其放到另一个列表中,然后用户可以在他们后悔并想要放入时显示在模式视图中回来了。在 ios7(但不是 iOS6)中,尽管调用了 setEditing:NO 等,但如此移动的单元格上仍然有一个又大又丑的“DELETE”按钮。 (此外,即使在调试器中检查单元格显示所有子窗格仍然存在,但单元格的其余内容根本没有绘制。)

与上面的 Stephen 不同,我没有重写 prepareForReuse,所以这不是问题。但这是相关的:在我的情况下,单元格不是使用重用标识符创建的:

self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

根据文档,“如果单元对象没有关联的重用标识符,则不会调用此方法。”但显然,至少在 iOS7 中,它应该是。

因此,就我而言,解决方案是在将每个单元格加载到新表中时显式调用此 [cell prepareForReuse]。

【讨论】:

以上是关于UITableViewCell 删除按钮没有消失的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 删除按钮动画

UITableViewCell 删除然后所有复选标记在swift上消失

为 UITableViewCell 上的特定按钮删除 UIButton 事件的链接

滚动时 UITableViewCell 的选定按钮消失

UITableViewCell 删除按钮没有出现

UITableViewCell 图像在滚动时消失