2017-01-10 6 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() 
     } 
    } 

}