我遇到一个问题,表格会显示一长串的演习,当用户导航离开然后返回时,我希望将其留在当前的滚动位置。
在我的视图控制器中,我有代码,只要视图出现,就会通过调用getDrillList(optimize: true)
来加载UITableView的数据,drillListArray
将数据存储在名为override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
getDrillList(optimize: true)
}
的属性中。
private func getDrillList(optimize: Bool = false)
{
// MAKE API CALL, THE ARRAY IS POPULATED IN THE COMPLETE HANDLER
let appDelegate = UIApplication.shared.delegate as! AppDelegate
SharedNetworkConnection.apiGetDrillList(apiToken: appDelegate.apiToken, limit: (optimize ? 13 : 0), completionHandler: { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print("error=\(error)")
return
}
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
// 403 on no token
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(response)")
SharedNetworkConnection.apiLoginWithStoredCredentials(completionHandler: { data, response, error in
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let json = try? JSONSerialization.jsonObject(with: data!, options: [])
if let dictionary = json as? [String: Any] {
if let apiToken = dictionary["token"] as? (String) {
appDelegate.apiToken = apiToken
self.getDrillList()
}
}
})
return
}
self.drillListParser = DrillListParser(jsonString: String(data: data, encoding: .utf8)!)
self.drillListArray = (self.drillListParser?.getDrillListArray())!
DispatchQueue.main.async {
self.drillTableView.reloadData()
}
if optimize {
self.getDrillList()
}
})
}
以下是加载数据的代码
Back
两个问题
首先,如果向用户显示另一个视图控制器的segue,然后通过<form class="form-horizontal">
返回,我如何检查数据是否已加载以避免再次加载?检查阵列是否为空是否安全?
其次,这种方法我应该注意哪些重新发布?
答案 0 :(得分:2)
在getDrillList(optimize: true)
中添加viewDidLoad()
,它会在生命周期中调用一次,或者您可以通过布尔标记检查是否已加载数据。