我覆盖了方法:
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView
editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
在单元格旁边显示加号按钮。在用户编辑单元格的内容后,我想将其从加号按钮更改为减号按钮。逻辑已经用这种方法编写了。问题是,即使调用此方法并且它返回正确的值,它也不会更新按钮。
使用:
[myViewCell setNeedsLayout];
...不会导致[myTableView tableView:editngStyleForRowatIndexPath:]
运行。
致电
[tableView reloadRowsAtIndexPaths: ... withRowAnimation:UITableViewRowAnimationNone];
...做了一些奇怪的事情...它会导致[myTableView tableView:editngStyleForRowatIndexPath:]
在所有行上被调用,除了我在reloadRowsAtIndexPaths
参数中发送的行。
无论如何,因为我要插入一行,所以我的所有行都会调用该方法,包括我要更改的那一行。我检查它是否正在返回UITableViewCellEditingStyleDelete
。尽管它返回了正确的值,但它仍然显示加号图标而不是减号图标。
调用[tableview reloaddata]
不起作用。
editingStyle
上有一个UITableViewCell
属性,看起来它可以解决我的问题,但它是只读的。
就好像tableView:editingStyleForRowAtIndexPath:
方法设置editingStyle
后,永远不会改变。那么,为什么在将行滚动到视图中时会不断调用此方法?
如何更改UITableViewCell的编辑控件?
您会注意到,在Apple的“联系人”应用程序中,除了从UITableViewCellEditingStyleNone
而不是UITableViewCellEditingStyleInsert
转换之外,还有相同的确切行为。这可以通过编辑联系人,然后在最后一个电话字段中键入一个数字(即添加新的电话号码)来看到:当前行获得一个减号按钮,并在其下方添加一个新行。
答案 0 :(得分:1)
我的应用程序中有两个地方存在类似的问题。我在编辑时找不到改变或更新细胞的editingStyle的方法,它开始让我发疯。
我有一个单元格,我想在用户输入内容时添加减号,而另一个单元格,当用户点击单元格并将其转换为有效字段时,我想删除加号。
我最终通过调用
解决了这两个问题- (void) prepareForReuse;
在有问题的单元格上。我不认为这是一个优雅的解决方案,但它在某种程度上有效。如果我在开始编辑之前调用此方法会导致一些奇怪的动画故障,但是如果我在更新基础数据结构后调用它并且在tableView beginUpdates
和tableView endUpdates
内,它会在我想要添加的情况下完美地动画减号。
在我的第二种情况下,通过在空tableView beginUpdates
和tableView endUpdates
序列之前调用此方法,删除加号而不显示动画。它看起来有点突兀,但只要功能存在,我就可以忍受。