更改UITableViewCell的编辑控件

时间:2010-08-31 07:20:43

标签: iphone uitableview ios

我覆盖了方法:

- (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转换之外,还有相同的确切行为。这可以通过编辑联系人,然后在最后一个电话字段中键入一个数字(即添加新的电话号码)来看到:当前行获得一个减号按钮,并在其下方添加一个新行。

1 个答案:

答案 0 :(得分:1)

我的应用程序中有两个地方存在类似的问题。我在编辑时找不到改变或更新细胞的editingStyle的方法,它开始让我发疯。

我有一个单元格,我想在用户输入内容时添加减号,而另一个单元格,当用户点击单元格并将其转换为有效字段时,我想删除加号。

我最终通过调用

解决了这两个问题
- (void) prepareForReuse;

在有问题的单元格上。我不认为这是一个优雅的解决方案,但它在某种程度上有效。如果我在开始编辑之前调用此方法会导致一些奇怪的动画故障,但是如果我在更新基础数据结构后调用它并且在tableView beginUpdatestableView endUpdates内,它会在我想要添加的情况下完美地动画减号。

在我的第二种情况下,通过在空tableView beginUpdatestableView endUpdates序列之前调用此方法,删除加号而不显示动画。它看起来有点突兀,但只要功能存在,我就可以忍受。