代码之家  ›  专栏  ›  技术社区  ›  Made2k

UITableView滚动刷新使单元格跳转

  •  2
  • Made2k  · 技术社区  · 11 年前

    我已经在一个表视图中实现了pull-to-refresh,它是我主视图的子视图,如下所示:

    UITableViewController *tableViewController = [[UITableViewController alloc] init];
    tableViewController.tableView = self.tableView;
    self.refreshControl = [[UIRefreshControl alloc] init];
    [self.refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
    tableViewController.refreshControl = self.refreshControl;
    

    这会更新表格,一切都很好,但我遇到的问题是,当我触摸表格拖动时,单元格似乎会在屏幕上方随机上移。当我从屏幕中间向下触摸和拖动时,或者在单元格移回正常位置之前拖动时,就会发生这种情况。下面是一些屏幕截图,可以更好地绘制图片。请记住,所有这些都是在我向下拖动后拍摄的,但单元格会向上移动。

    应该看起来像:

    enter image description here

    细胞跳跃后实际上看起来是这样的:

    enter image description here enter image description here

    1 回复  |  直到 10 年前
        1
  •  0
  •   Made2k    11 年前

    对于任何可能有这个问题或类似问题的人,我找到了一种方法来刷新滚动,使其非常顺利地工作,而不会导致我遇到的问题。我现在使用的是实际的UITableViewController,而不是嵌入式的UITableView,这有助于解决一些滚动问题,但我仍然有一个问题,即刷新图标的关闭没有设置动画(表向上滑动以覆盖旋转的圆圈),而是立即关闭,看起来非常不和谐。我把刷新逻辑放在后台,让它完成,然后完成刷新。我的代码结构如下:

    - (void)viewDidLoad {
        //set up refreshcontrol to call my refresh method
    }
    
    - (void)refresh {
        [self performSelectorInBackground:@selector(getUpdatedInfo) withObject:nil];
    }
    

    更新的信息会运行,而我的TableViewController是我的类的一个委托,它会获取刷新的信息。当接收到所有信息并完成更新时,我在刷新TableViewController类中调用委托方法,该方法将接收到的数组放入表中,更新表,并结束刷新。

    - (void)didFinishingUpdatingWithArray:(NSArray *)array {
        //configure table sections
        //Save the data
        [self.tableview reloadData];
        [self.refreshControl endRefreshing];
    }