【问题标题】:UIRefresh for UITableView do not work iOS 10UITableView 的 UIRefresh 在 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] 之前被调用。 我哪里错了.....

【问题讨论】:

标签: ios objective-c iphone uitableview


【解决方案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 检查我的答案和说明
猜你喜欢
  • 1970-01-01
  • 2018-01-04
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多