2017-01-10 16 views
1

リフレッシュの進行が完了すると、自分のリフレッシュコントロールが消えません。私はendRefreshing()を呼び出してもアニメーションは残っています。RefreshControlが非表示にならない

import UIKit 

class MyTableViewController: UITableViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     refreshControl = UIRefreshControl() 
     refreshControl?.attributedTitle = NSAttributedString(string: "Pull to refresh") 
     refreshControl?.addTarget(self, action: #selector(self.refresh), for: UIControlEvents.valueChanged) 
     tableView.addSubview(refreshControl!) 

     setData() 
    } 

    func setData(){ 
     ApiClient.sharedInstance().getData{(myData, error) in 
      if (myData != nil){ 
       DispatchQueue.main.async { 
        self.myLabel.text = myData 
        self.refreshControl?.endRefreshing() 
       } 
      } 

      if (error != nil){ 
       print(error) 
      } 
     } 
    } 

    func refresh(sender:AnyObject) { 
     setData() 
    } 

} 

私を助けることができますか?

+0

あなたは、メインスレッド上でendRefreshing呼び出す必要があります。 – Starlord

+2

これは既に "DispatchQueue.main.async {"で完了していませんか? – Pascal

+0

'self.myLabel.text'は更新されますか? – keithbhunter

答えて

0

beginUpdatesとendUpdatesは魔法をしました。

これは私を1時間狂ってしまった。最後に、ネットワークコールが完了してテーブルビューを更新するときに、この部分が機能しました。

class TransactionsViewConttroller : MyBaseTableViewController{ 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.refreshControl?.addTarget(self, action: #selector(refresh), for: .valueChanged) 
    } 
    @objc func refresh() { 
     justRefreshTransactions() 
    } 

    private func justRefreshTransactions(){ 
     ServiceRequest.getLatestTransactions(completionBlock : {(error, errorMsg,result) in 
       self.stopRefrshIndic() 
     }) 
    } 

    private func stopRefrshIndic(){ 
     DispatchQueue.main.async { 
      self.tableView.beginUpdates() 
      self.refreshControl?.endRefreshing() 
      self.tableView.endUpdates() 
     } 
    } 

}

関連する問題