2016-05-14 14 views
0

UITableViewArrayを迅速に使用してロードしています。私がしたいのは、テーブルがロードされた後に配列が空でなければならないということです(配列内のすべてのオブジェクトを削除してから別のテーブルビューをロードする別のデータセットをロードしたい)。UITableViewが即座にデータのロードを完了しました

私がやりたいことは、 UIScrollViewに移動し、すべてのデータを最初にすべて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

これはすべて間違っています。各テーブルビューには独自のデータが必要です。これらのテーブルがまったく同じデータを表示するものでない限り、複数のテーブルに1つの配列を再利用することはできません。 – rmaddy

答えて

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 
} 
関連する問題