gpt4 book ai didi

ios - 如何知道 UITableView 已完成 swift 中的数据加载

转载 作者:行者123 更新时间:2023-11-29 00:59:13 29 4
gpt4 key购买 nike

我正在使用 Array 快速加载我的 UITableView。我想要做的是在表加载后我的数组应该是空的(想要删除数组中的所有对象,然后加载另一个数据集以加载另一个 TableView )

我想要做的是将多个 UItable 动态添加到 UIScrollView 中,并最初将所有数据加载到每个 UITableView 中。然后用户可以水平滚动 ScrollView 并查看其他表。所以在我的 ViewDidLoad 中,我正在做这样的事情。

 for i in 0..<dm.TableData.count {

self.catID=self.dm.TableData[i]["term_id"] as? String
self.jsonParser()
}

那么这是我的jsonParser

func jsonParser() {



let urlPath = "http://www.liveat8.lk/mobileapp/news.php?"
let category_id=catID
let catParam="category_id"
let strCatID="\(catParam)=\(category_id)"

let strStartRec:String=String(startRec)
let startRecPAram="start_record_index"
let strStartRecFull="\(startRecPAram)=\(strStartRec)"


let strNumOfRecFull="no_of_records=10"

let fullURL = "\(urlPath)\(strCatID)&\(strStartRecFull)&\(strNumOfRecFull)"
print(fullURL)


guard let endpoint = NSURL(string: fullURL) else {
print("Error creating endpoint")
return
}

let request = NSMutableURLRequest(URL:endpoint)
NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) in
do {
guard let data = data else {
throw JSONError.NoData
}
guard let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary else {
throw JSONError.ConversionFailed
}
print(json)
if let countries_list = json["data"] as? NSArray
{

for (var i = 0; i < countries_list.count ; i++ )
{
if let country_obj = countries_list[i] as? NSDictionary
{
//self.TableData.append(country_obj)
self.commonData.append(country_obj)


}
}

//self.updateUI()
if self.commonData.isEmpty
{

}
else
{
self.updateUI()
}



}

} catch let error as JSONError {
print(error.rawValue)
} catch let error as NSError {
print(error.debugDescription)
}
}.resume()


}

然后 UpdateUI()

func updateUI()
{


print("COMMON DATA ARRAY\(self.commonData)")
// print("NEWS DATA ARRAY\(self.newsNews)")
//print("SPORTS DATA ARRAY\(self.sportsNews)")
let tblY:CGFloat=segmentedControl.frame.origin.y+segmentedControl.frame.size.height
tblNews=UITableView.init(frame: CGRectMake(x,0 , self.screenWidth, self.screenHeight-tblY))
tblNews.tag=index
tblNews.delegate=self
tblNews.dataSource=self
tblNews.backgroundColor=UIColor.blueColor()

self.mainScroll.addSubview(tblNews)
x=x+self.screenWidth




index=index+1

tblNews.reloadData()


}

`UITableView` use this `commonData` array as the data source. Now when I scroll table view data load with previous data too.So what is the best way to do this? or else please tell me how can use `self.commonData.removeAll()` after 1 `UITableView` has loaded.Currently I did in `CellforrowAtIndex`

if indexPath.row == self.commonData.count-1
{
self.commonData.removeAll()
}


return cell

但这并不能解决我的问题

最佳答案

对于每个 UITableView,您应该有单独的数据集,可能是数组。 iOS 将回调您的数据源委托(delegate)方法来请求数据。

重要的是您从数组中删除数据,因为 iOS 将调用您的数据源委托(delegate)方法来获取数据。即使您最初在 TableView 中显示数据,用户也可能会滚动 ScrollView ,导致其中一个 UITableView 调用您的委托(delegate)方法以再次获取数据。

数据源委托(delegate)方法,例如 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 有一个 UITableView 参数,您可以使用它来确定哪个数据源是合适的。

例如,您可能有:

self.commonData1 = ["a", "b", "c"]
self.commonData2 = ["d", "e", "f"]

并且您需要跟踪添加到 ScrollView 中的所有表格:

self.tableView1 = ...the table view you create & add to scroll view
self.tableView2 = ...the table view you create & add to scroll view

当您响应数据源调用时:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
if tableView == self.tableView1 {
return 1
} else if tableView == self.tableView2 {
return 1
}
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == self.tableView1 {
return self.commonData1.count
} else if tableView == self.tableView2 {
return self.commonData2.count
}
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! IdeaTableViewCell
if tableView == self.tableView1 {
cell.textLabel?.text = self.commonData1[indexPath.row]
} else if tableView == self.tableView2 {
cell.textLabel?.text = self.commonData2[indexPath.row]
}

return cell
}

关于ios - 如何知道 UITableView 已完成 swift 中的数据加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37222310/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com