UITableView 的 UIRefresh 在 iOS 10 中不起作用

Posted

技术标签:

【中文标题】UITableView 的 UIRefresh 在 iOS 10 中不起作用【英文标题】:UIRefresh for UITableView do not work iOS 10 【发布时间】:2017-02-08 11:51:41 【问题描述】:

我正在尝试使用 UIRefresh 用最新数据重新加载 UITableView。

    self.refreshControl = [[UIRefreshControl alloc] init];
    [self.refreshControl addTarget:self
                            action:@selector(myRefresh)
                  forControlEvents:UIControlEventValueChanged];
    [self.tableView addSubview:self.refreshControl];

- (void)myRefresh

  //Empty array which hold old data.
 //calling API to get fresh data 


-(void)delegatefromAPI
 
    //array will be reloaded with data from DB
    [self.tableView reloadtable];
    // End the refreshing
    if (self.refreshControl) 
        [self.refreshControl endRefreshing];
    

但问题是在 API 调用去获取数据之前,cellForRowAtIndexPath 被调用(自动)此时加载每个单元格为空的数组是空的。 但是我在获取数据后调用[self.tableView reloadtable];,然后调用"[self.refreshControl endRefreshing]"。 但是 cellForRowAtIndexPath 在 delegatefromAPI 中的 [self.tableView reloadtable] 之前被调用。 我哪里错了.....

【问题讨论】:

请看这个,***.com/a/39835854/4611751 检查我的答案你得到了你的解决方案 【参考方案1】:
 self.refreshControl = [[UIRefreshControl alloc] init];
 self.refreshControl.tintColor = YOURCOLOR_FOR_REFRESHCONTROL;
 [self.refreshControl addTarget:self action:@selector(fetchContactList) forControlEvents:UIControlEventValueChanged];
 if #available(ios 10.0, *) 
       self.YOURTABLE.refreshControl = refreshControl
  else 
       [self.YOURTABLE addSubview:self.refreshControl];
 



-(void)fetchContactList
       // your API call inside that stop animation
       [self.refreshControl endRefreshing];
       [self.YOURTABLE reloadData];


#pragma mark - UITableview delegate method
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    return YOURARRAY.count;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *simpleTableIdentifier = @"YOURCELLIDENTIFIER";
    RegisteredContactTVCell *cell = (RegisteredContactTVCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
   cell.lblName.text = @"VALUE";
   return cell;

输出:

【讨论】:

kiran 检查我的答案和说明

以上是关于UITableView 的 UIRefresh 在 iOS 10 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

拖动时删除 UITableView 和 UIRefreshControl 之间的空白

UIRefresh 控件 endRefreshing 不起作用

没有 UITableViewController 的 UIRefreshControl 不调用选择器

android开发怎么刷新 scrollview

游戏开发中的银弹

如何在没有数组的 UITableView 中显示 UITableView Cell?