【问题标题】:Changing the editing control of a UITableViewCell更改 UITableViewCell 的编辑控件
【发布时间】:2010-08-31 07:20:43
【问题描述】:

我重写了方法:

- (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 的联系人应用程序中,存在完全相同的行为,只是它是从 UITableViewCellEditingStyleNone 而不是 UITableViewCellEditingStyleInsert 转换。这可以通过编辑联系人,然后在最后一个电话字段中输入一个数字(即添加一个新电话号码)来查看:当前行有一个减号按钮,并在其下方添加一个新行。

【问题讨论】:

    标签: iphone uitableview ios


    【解决方案1】:

    我的应用中有两个地方有类似的问题。我在编辑时找不到更改或更新单元格编辑样式的方法,这让我发疯了。

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

    我最终通过调用解决了这两个问题

    - (void) prepareForReuse;
    

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

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

    【讨论】:

    • 有没有找到更好的解决方案?它是从左侧动画的东西,包括 - 符号,在我的例子中,用于清除单元格中文本字段的内容的 (x)。再加上对表中的某些内容运行 prepareForReuse 似乎很可怕。
    猜你喜欢
    • 2012-05-10
    • 2010-10-15
    • 2016-12-26
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多