2017-02-08 13 views
0

UITableViewを最新のデータでリロードするためにUIRefreshを使用しようとしています。UITableViewのUIRefreshがiOS 10で動作しない

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];と呼んでいます。 ただし、cellForRowAtIndexPathはdelegatefromAPIの[self.tableView reloadtable]より前に呼び出されます。私は間違っているつもりです .....

+1

、本に見http://stackoverflow.com/a/39835854/4611751 – Rajesh73

+0

私を確認してください答えはあなたの答えを持っています –

答えて

0
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; 
} 

出力:

CHECK

+0

kiranは私の答えと指示をチェックします –

関連する問題