2010-08-31 49 views
2

的编辑控制我推翻方法:改变一个UITableViewCell

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

做一个加号按钮旁边出现一个细胞。用户编辑单元格的内容后,我想将其从加号按钮更改为减号按钮。逻辑已经用这种方法编写了。问题是,即使这个方法被调用,并且它返回了正确的值,它也不会更新按钮。

使用:

[myViewCell setNeedsLayout]; 

...不会导致[myTableView tableView:editngStyleForRowatIndexPath:]下运行。

调用

[tableView reloadRowsAtIndexPaths: ... withRowAnimation:UITableViewRowAnimationNone]; 

...确实很奇怪......它会导致[myTableView tableView:editngStyleForRowatIndexPath:]要对除了一个我在reloadRowsAtIndexPaths参数发送给所有行调用。

不管,因为我插入行,该方法被调用我的所有行,包括我想改变。我检查它是否返回UITableViewCellEditingStyleDelete。尽管它返回了正确的值,但它仍然显示加号图标而不是减号图标。

调用[tableview reloaddata]不起作用。

UITableViewCell上有一个editingStyle属性,它似乎可以解决我的问题,但它是只读的。 这就好像一旦tableView:editingStyleForRowAtIndexPath:方法已经设置editingStyle,这是不能改变的。那么为什么当这些行滚动到视图中时这种方法会被不断调用呢?

我怎样才能改变一个UITableViewCell的编辑控制?

您会注意到,在Apple的Contacts应用程序中,除了它从UITableViewCellEditingStyleNone而不是UITableViewCellEditingStyleInsert转换为相同的确切行为。这可以通过编辑联系人,然后在最后一个手机字段中输入一个数字(即添加一个新的电话号码)来看到:当前行获得一个减号按钮,并在其下面添加一个新行。

回答

1

我有类似的问题,在我的应用程序两个地方。我找不到在编辑时更改或更新单元格编辑样式的方法,它开始令我发狂。

我有一个小区,我想添加一个减号,当用户输入了什么东西,而另一种,我想删除一个加号,当用户单击单元格,并把它改造成一个有效的字段。

我最终通过在该小区中调用

- (void) prepareForReuse; 

解决了这两个问题。我不认为这是一个优雅的解决方案,但它以某种方式起作用。如果我把这个方法之前,我开始编辑它会导致一些奇怪的动画小故障,但如果我更新底层数据结构后内tableView beginUpdatestableView endUpdates叫它它完美的动画效果,我想添加减号的情况。

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

+0

有没有找到一个更好的解决方案呢?它是从左侧开始动画的东西,无论是 - 符号还是在本例中,用于清除单元格中文本字段内容的(x)。再加上在表格中的某些东西上运行prepareForReuse看起来很可怕。 – smparkes 2011-06-03 01:11:33

+0

cf http://stackoverflow.com/questions/5622431/update-editing-style-of-uitableviewcell-depending-on-contents – smparkes 2011-06-03 02:02:35