如何知道UITableView已经完成了在swift中加载数据

时间:2016-05-14 03:52:18

标签: ios swift uitableview uiscrollview

我在swift中使用UITableView加载Array。我想要做的是在表加载后我的数组应该是ampty(想要删除数组中的所有对象然后加载另一个数据集来加载另一个表视图)

我想要做的是在UIScrollView上添加几个UItables,并将所有数据最初加载到每个UITableView。然后用户可以水平滚动滚动视图并查看其他表格。所以在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

但这并没有解决我的问题

1 个答案:

答案 0 :(得分:1)

每个UITableView都应该有单独的数据集,可能还有数组。 iOS将回调您的数据源委托方法以请求数据。

重要的是从数组中删除数据,因为iOS会调用期望数据的数据源委托方法。即使您最初在表视图中显示数据,用户也可以滚动滚动视图,导致其中一个UITableView调用您的委托方法再次获取数据。

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

例如,您可能有:

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

您需要跟踪添加到滚动视图中的任何表格:

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
}