【发布时间】:2018-08-21 17:18:20
【问题描述】:
我是 ios 开发新手。我想使用分页在tableview中加载大量数据。加载新页面时,我将数据附加到“myMainList”并重新加载tableview,但这似乎不是加载更多数据的好方法。我找不到快速的一个很好的解决方案。
我的 json 响应中有一个分页对象。
{
"pagination" : {
"total" : 13,
"last_page" : 2,
"per_page" : 10,
"next_page_url" : null,
"current_page" : 2,
"prev_page_url" : "http:\/\/xxxxxxxxxxxx/page=1"
}
}
这是我的代码。希望您能理解我的问题。正在寻找一个好的解决方案。在此先感谢。
var pagenationURL = ""
var myMainList : [MyModel] = []
var rowCount : Int = 0
override func viewDidLoad() {
super.viewDidLoad()
let parameters = ["token":NetworkingUtil.getUserToken()]
callWebService(parameters: parameters)
}
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
let lastItem = rowCount-1
if(indexPath.row) == lastItem {
loadMoreData()
}
}
func loadMoreData(){
let parameters = ["token":NetworkingUtil.getUserToken()]
if(pagenationURL.isEmpty){
print("end of page")
}
else{
callWebService1(parameters: parameters)
}
}
func callWebService(parameters : [String : String]) {
Alamofire.request(Common.getMyExpense(), method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: NetworkingUtil.getAlamoFireHeader()).responseJSON { (Response) in
let error = Response.result.error
let req = Response.request
let res = Response.response
let json = Response.data
if error != nil {
if req != nil && res != nil {
print(req!)
print(res!)
}
}else{
var parsedjson : JSON!;
do {
parsedjson = try JSON(data : json!)
print(parsedjson)
} catch {
print(error)
}
else{
let myExpensejson = parsedjson["results"]
self.pagenationURL = parsedjson["pagination"]["next_page_url"].stringValue
let lostkeyrequestscount : Int = myExpensejson.count
self.rowCount = lostkeyrequestscount
self.myMainList = []
for(_,keylist): (String,JSON) in myExpensejson
{
let status = lostkeylist["status"].stringValue
let date = lostkeylist["date"].stringValue
let keyObject = MyExpenseModel(status: status, date: date)
self.myMainList.append(keyObject)
self.tableview.reloadData()
}
}
}
}
}
func callWebService1(parameters : [String : String]) {
Alamofire.request(pagenationURL, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: NetworkingUtil.getAlamoFireHeader()).responseJSON { (Response) in
let error = Response.result.error
let req = Response.request
let res = Response.response
let json = Response.data
SVProgressHUD.dismiss()
if error != nil {
if req != nil && res != nil {
print(req!)
print(res!)
}
}else{
var parsedjson : JSON!;
do {
parsedjson = try JSON(data : json!)
print(parsedjson)
} catch {
print(error)
}
else{
let myExpensejson = parsedjson["results"]
self.pagenationURL = parsedjson["pagination"]["next_page_url"].stringValue
let lostkeyrequestscount : Int = myExpensejson.count
self.rowCount = lostkeyrequestscount+self.rowCount
for(_,keylist): (String,JSON) in myExpensejson
{
let status = lostkeylist["status"].stringValue
let date = lostkeylist["date"].stringValue
let keyObject = MyExpenseModel(status: status, date: date)
self.myMainList.append(keyObject)
self.tableview.reloadData()
}
}
}
}
}
【问题讨论】:
标签: ios swift uitableview swift3 pagination