无法将UITableViewCell重新排序为UITableView的_some_空部分

时间:2010-03-08 23:39:01

标签: iphone uitableview

如果我在编辑模式下有一个UITableView,打开重新排序,似乎我无法将一些(但不是全部)单元格移动到某些(但不是全部)空白部分。例如,如果我有这个布局:

Section 1
  apple
  banana
Section 2
  doberman
Section 3
Section 4

然后我可以将'杜宾犬'移到第1部分的任何一个插槽中(除了'香蕉'之外),但我根本无法将它移到第3或第4部分。

另一方面,我可以移动'apple'& '香蕉'进入第2节(除了'杜宾犬'之外),我可以将其移至第3节,但不能进入第4节。

是什么给出的?这似乎是越野行为。人们如何解决这个问题?苹果是否意识到这个错误?

4 个答案:

答案 0 :(得分:2)

是的,这是一个苹果虫。我跟苹果说话,用我的一张“支持票”告诉我这是他们的不好。

我也是通过从显而易见的许多节表模型转移到只有一个节的模型,并将“节标题”建模为样式表视图单元格来解决它。

愚蠢的苹果......

答案 1 :(得分:2)

我使用了另一个hack:在编辑模式下创建一个带有空单元格的虚拟最后一个部分(不可见的backgroundView)。有了这个,我可以保持部分/行组织,并且重新排序工作非常好,即使是“最后”部分。

另一种方法是,使用与单元格至少相同高度的节页脚。在这种情况下,单元格可以越过最后一个部分的最后一个单元格。

答案 2 :(得分:2)

在此博客中告诉您最简单的方法:

http://davemeehan.com/technology/moving-uitableviewcell-between-sections-in-grouped-uitableview

无论该部分是否为空。只需返回titleForFooterInSection中的一些文本:您就能解决问题。它甚至可以通过返回@“”来实现。

答案 3 :(得分:0)

Sirdek是对的。只需将以下代码复制到UITableViewDelegate / UITableViewDataSource中即可。

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    NSInteger lastSection = [self numberOfSectionsInTableView:tableView] - 1;
    NSInteger lastRow = [self tableView:tableView numberOfRowsInSection:lastSection] - 1;
    CGFloat height = [self tableView:tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:lastRow inSection:lastSection]];

    return (section == lastSection ? [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, height)] autorelease] : nil);
}


- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    NSInteger lastSection = [self numberOfSectionsInTableView:tableView] - 1;
    NSInteger lastRow = [self tableView:tableView numberOfRowsInSection:lastSection] - 1;
    CGFloat height = [self tableView:tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:lastRow inSection:lastSection]];

    return (section == lastSection ? height : 0);
}