私はUITableViewを持っていますが、最近はプル・リフレッシュ機能を追加しました。UIRefreshControlを非表示にするには、データの取得が完了したときのみ(Swiftで)?
は、これまでのコードは次のようになります。
@IBOutlet var tview: UITableView!
var currentDate: NSDate = NSDate()
override func viewDidLoad(){
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged)
refreshControl.attributedTitle = NSAttributedString(string: "last updated on \(currentDate)")
tview.separatorStyle = UITableViewCellSeparatorStyle.None
tview.addSubview(refreshControl)
}
func refresh(refreshControl: UIRefreshControl) {
refreshControl.attributedTitle = NSAttributedString(string: "last updated on \(currentDate)")
fetchRequests()
}
あなたはまた、私は、ユーザーの最後の時間を表示するためにそこにattributedTitleを設定するよ、私はリフレッシュ制御関数の内部機能を呼んでいる見ることができるようにアップデートのWebサービスを呼び出し、非同期データをフェッチ
My機能:
func fetchRequests(){
Alamofire.request(.GET, "https://mywebservice", parameters: ["username": username])
.responseJSON { response in
switch response.result {
case .Success:
self.items.removeAllObjects()
if let jsonData = response.result.value as? [[String: AnyObject]] {
for requestJSON in jsonData {
if let request = SingleRequest.fromJSON(JSON(requestJSON)){
self.items.addObject(request)
dispatch_async(dispatch_get_main_queue(),{
self.tview.reloadData()
self.refreshControl?.endRefreshing()
self.currentDate = NSDate()
})
}
}
}
//self.tview.reloadData()
case .Failure(let error):
print("SWITCH ERROR")
print(error)
}
}
}
と私はリフレッシュが行われたときにrefreshControlを非表示にします。
この行:fetchRecordsでsuccess
例
self.refreshControl?.endRefreshing()
内部は動作しません。成功した場合、どうすればそこからrefreshControlを参照して終了できますか?また、現在、私はfetchRecordsの最後に行をコメントアウト:リロードがdispatch_async
内部で行われることを願っています
//self.tview.reloadData()
私は/信じているから - それは良い仮定がありますか?
ですが、 'dispatch_async(dispatch_get_main_queue()、{'?)の中で 'self.refreshControl?.endRefreshing()'を呼び出すときに今行っていることではありませんので、残念ながらうまくいきません。 .. – randomuser1