在UITableView中完成编辑时如何防止单元格宽度扩展

时间:2013-08-26 14:21:54

标签: ios ipad uitableview

如果您在点击“+​​”编辑图标时在iPad联系人应用程序中发现添加新地址,则当图标消失时,单元格不会向左展开(请参阅下面的第一个屏幕截图)。我正在尝试做类似的事情,但我没有运气(见下面的第二个屏幕截图)。我尝试使用建议的here解决方案,但没有用。

对于记录,我不是要复制实际的联系人应用程序或与联系人集成。我们正在研究一些不相关的东西,我的设计师只是想遵循这种模式,所以做一些POC工作,看看我能做些什么。

编辑 - 另一个问题,验证我的想法是,在这里的联系人应用程序中发生的事情是当点击“+”图标时,此单元格被设置为不再编辑,这些文本字段被添加到单元格,标签改变了,然后调用reloadData,对吗?

编辑 - 感谢Tim的建议,我快到了!我实际上已经完成了其中的一半,但后来遇到的问题是“+”图标没有动画,只是突然消失了。所以我添加了reloadRows ...调用commitEditingStyle,但现在整个单元格消失了。这是我的代码:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITableViewCellEditingStyle editingStyle = UITableViewCellEditingStyleNone;
    if (self.showEditingIcon) {
        editingStyle = UITableViewCellEditingStyleInsert;
        self.showEditingIcon = NO;
    }
    return editingStyle;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    //    tableView.editing = NO;
    //    tableView.editing = YES;
    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}

你可以从我注释掉的线条中看到我原来的东西,但是正如我所说的那样,它不是动画 - “+”按钮突然消失了。如果我试图调用[tableView setEditing:NO animated:YES]它将无效。当我试图将这些调用放在UIView动画块中时,它看起来不太好 - 可以看到单元格暂时向左和向后移动。但是现在重载调用时,单元格完全消失。目前我没有对我的单元格进行任何更改(例如我没有添加文本字段等等),因为我只是想让“+”按钮动画化,而不会让单元格扩展左边的工作在第一次迭代。

任何帮助非常感谢。感谢。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

技巧是始终处于编辑模式,使得单元格缩进保持不变。加载单元格后,您可以决定它所处的状态并返回相应的编辑样式,“插入”样式或“无”:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    BOOL shouldShowInsertButton = ...;//check internal state for cell
    return shouldShowInsertButton ? UITableViewCellEditingStyleInsert : UITableViewCellEditingStyleNone;
}

然后,当点击编辑按钮时,您将更新内部状态并重新加载单元格:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...;//update internal state for cell
    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}

修改

这是一个有效的sample project