showsReorderControl有什么作用?

7
我有一个UITableView实例并已经实现了以下内容:
tableView:canEditRowAtIndexPath:
tableView:editingStyleForRowAtIndexPath:
tableView:shouldIndentWhileEditingRowAtIndexPath:
tableView:canMoveRowAtIndexPath:
tableView:moveRowAtIndexPath:toIndexPath:

接下来,我可以看到所有带有重新排序控件的单元格。

苹果公司的标题是:

@property(nonatomic) BOOL showsReorderControl; // default is NO

如果默认值是NO,为什么我还能看到重新排序的控件?
更新: 我还在tableView:cellForRowAtIndexPath:方法中检查了属性的值,在单元格创建后立即进行检查。
(lldb) p [c showsReorderControl]
(BOOL) $1 = NO

也许通过将其设置为“YES”来显示重新排序控件? - user529758
我不理解你的问题是什么。"showsReorderControl有什么作用"似乎是一个自问自答的问题。 - Mick MacCallum
抱歉。希望现在好一些了。现在只有一个清晰的问题。 - Rudolf Adamkovič
头部注释可能已经过时了 - 你是否记录了该值以查看它是否真的是无? - David H
@DavidH 非常好的想法,我会尽快做到的(现在无法完成)。 - Rudolf Adamkovič
2个回答

10
当你从tableView:canMoveRowAtIndexPath:返回YES时,它会做与设置showsReorderControl为YES相同的事情。这两种方法都可以启用重新排序控件。
实际上,还有第三种方式——让我们永远不要抱怨我们没有选择!;)根据tableView:canMoveRowAtIndexPath:的文档:
该方法允许委托指定不显示指定行的重新排序控件。默认情况下,如果数据源实现了tableView:moveRowAtIndexPath:toIndexPath:方法,则会显示重新排序控件。

我明白了,非常好的解释,非常感谢!还有一个子问题 - 直接更改 showsReorderControl 的原因是什么? - Rudolf Adamkovič
说实话,我想不出有什么情况需要这样做。我猜可能是在我们的代理方法返回后,tableView 在重新绘制单元格时使用。 - J Shapiro
我刚刚进行了一个快速测试。在调用tableView:moveRowAtIndexPath:toIndexPath:时,正在移动的单元格的showsReorderControl属性被设置为YES。 - J Shapiro
非常感谢。现在一切都清楚了。非常感谢! - Rudolf Adamkovič
如何允许重新排序但同时隐藏控件? - Mahmoud Zinji

2
通过阅读当前的苹果文档,似乎showsReorderControl没有任何用处。 UITableViewCell 引用:
为了让重新排序控件出现,您不仅必须设置此属性,还必须实现UITableViewDataSource方法tableView:moveRowAtIndexPath:toIndexPath:。 UITableViewDataSource 引用:
默认情况下,如果数据源实现了tableView:moveRowAtIndexPath:toIndexPath:方法,则会显示重新排序控件。
从这份文档中我得出以下结论:
1- 显示重新排序控件的唯一方法是实现tableView:moveRowAtIndexPath:toIndexPath:,这将在所有单元格中显示控件。
2- 如果您希望某个单元格显示控件,则必须从tableView:canMoveRowAtIndexPath:返回NO。
3- showsReorderControl 对重排控件是否显示没有控制作用。

从查阅文档来看,我的理解是:如果你有一个可移动的单元格,但不想显示“抓手”控件,你可以将其关闭。尽管如此,如果你这样做了,我不确定你如何移动任何东西,因为该控件是拾取单元格的便利性。 - benc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接