ios - 在 UITableView 中完成编辑后如何防止单元格宽度扩大

标签 ios ipad uitableview

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

郑重声明,我并没有尝试复制实际的联系人应用程序或与联系人集成。我们正在做一些不相关的事情,我的设计师只是想遵循这种模式,所以做一些 POC 工作看看我能做什么。

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

编辑 - 感谢 Tim 的建议,我快完成了!我实际上已经解决了其中的 1/2,但后来遇到了“+”图标没有动画化,只是突然消失的问题。所以我添加了 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 动画 block 中时,它看起来不太好——可以看到单元格暂时向左和向后移动。但是现在通过重新加载调用,单元格完全消失了。目前我没有对我的单元格进行任何更改(例如我没有添加文本字段等...)因为我只想让“+”按钮动画化而不使单元格展开左侧工作在第一次迭代中。

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

enter image description here enter image description here

最佳答案

诀窍是始终处于编辑模式,以便单元格缩进保持不变。加载单元格时,您决定它处于什么状态并返回适当的编辑样式,“插入”样式或“无”样式:

- (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 .

关于ios - 在 UITableView 中完成编辑后如何防止单元格宽度扩大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18446407/

相关文章:

ios - toolsVersion ="11201"弄乱了我的 Storyboard

ios - 如果有多个 UICollectionView,则在一个 UICollectionView 中选择了哪个项目

iphone - 从 2011 年 11 月 1 日下载的 Xcode 4.2 (4C199) 运行 iOS4.x 模拟器

ios - GL图纸 View 在旋转时清除图纸

ios - 在tableView中添加日期作为节标题

iOS:TableView 中的多个部分不起作用

objective-c - TableView 顶部的 View 消失

ios - 在 NSOperation completionBlock 中时,animateWithDuration 无法正常运行

ios - 如何在 iOS 上使用应用内购买消费已购买的商品?

iphone - 核心图条形图 - 条不显示