如何在不滚动的情况下在表格视图顶部添加或删除屏幕外行?

时间:2010-11-16 20:20:03

标签: iphone cocoa-touch uitableview

我有一个包含项目列表的UITableView

当用户点按编辑 UIBarButtonItem时,需要删除第一行,因为它不可编辑。

我这样做:

- (void) setEditing: (BOOL) editing animated: (BOOL) animated
{   
    if (editing)
    {
        [self.theTableView deleteRowsAtIndexPaths: [NSArray arrayWithObject: [NSIndexPath indexPathForRow: 0 inSection: 0]] withRowAnimation: UITableViewRowAnimationTop];
        // call super afterward so the user doesn't see the row get an editing accessory before it disappears
        [super setEditing: editing animated: animated];
    }
    else
    {
        [super setEditing: editing animated: animated];
        [self.theTableView insertRowsAtIndexPaths: [NSArray arrayWithObject: [NSIndexPath indexPathForRow: 0 inSection: 0]] withRowAnimation: UITableViewRowAnimationTop];
    }
}

这段代码(不相关的位被剪掉)效果很好,但有一点需要注意:

如果用户位于表格的任何位置(假设有多个屏幕的行),则动画行为会导致整个表格视图向上(或向下)向上滚动,以及最后一个行为表中的行充其量是可用的。

我的问题:我怎样才能让用户可以看到顶行动画,但是当用户看不到它时,它就会消失,但不会导致表格滚动。

4 个答案:

答案 0 :(得分:0)

您是否尝试过UITableViewRowAnimationBottom而不是UITableViewRowAnimationTop

否则,您可以手动设置contentOffset的{​​{1}}属性以调整缺失的行。

答案 1 :(得分:0)

尝试使用UITableViewRowAnimationRight。如果单元格可见,则应该使单元格滑出,否则会使表格保持原样。

答案 2 :(得分:0)

在进行动画制作之前,请检查第一行是否可见。

如果是的话,那就是peoceed。

否则,您希望在用户向上滚动时不显示,对吗?所以用没有第一行的数据源替换表的数据源,编辑结束后将第一行返回到该数据源。

另一种选择可能是不通过操纵来显示它 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 但这可能是一种不好的做法。

答案 3 :(得分:0)

似乎没有任何简单的解决方案。我在UICollectionView完全自定义行为方面取得了有限的成功,但iOS的主要版本和多年后,甚至Apple自己的内置应用程序继续使这种边缘情况出错。