2016-11-29 3 views
0

次のコードでは、UITableViewのデータを取得します。このUITableViewに余分な列を追加し、すでにフェッチされたデータを取り込む方法を教えてください。

現在、表には1列のデータ「homeTeam」が表示されています。

希望する出力は、UITableView内に複数の列を持つことです。

私は以下のコードで見ることができる他の列の配列を取り出しました。

import UIKit 

class ShowResultsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 


var personalPlayerId: String? 
var communityId: String? 
var personalPlayer2Id: String? 
var postString: String? 

var homeTeam = [String?]() 
var homePlayer = [String?]() 
var homeGoals = [String?]() 

var awayTeam = [String?]() 
var awayPlayer = [String?]() 
var awayGoals = [String?]() 

var matchId = [String?]() 

var tempResult: Int? 

var selectedMatch: String? 

var headToHead: Bool? 

@IBOutlet weak var leagueTableView: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 



    self.leagueTableView.delegate = self 
    self.leagueTableView.dataSource = self 


} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return self.homeTeam.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let title = self.homeTeam[indexPath.row] 
    let cell = UITableViewCell() 

    return cell 

} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    tempResult = indexPath.row 

    if let tempShowResult = (self.homeTeam[tempResult!]){ 
     self.selectedMatch = tempShowResult 
    } 

} 

override func viewDidAppear(_ animated: Bool) { 
    let myUrl = URL(string: "http://www.???.uk/???/getLeagueResults.php") 
    var request = URLRequest(url:myUrl!) 
    request.httpMethod = "POST" 

    if self.headToHead == true { 
     self.postString = "player_id=\(self.personalPlayerId!)&player2_id=\(personalPlayer2Id!)&community_id=\(communityId!)"; 
    }else{ 
     if self.headToHead == false{ 
      self.postString = "player_id=\(self.personalPlayerId!)&community_id=\(communityId!)"; 
     } 
    } 

    request.httpBody = self.postString?.data(using: String.Encoding.utf8); 
    let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in 
     DispatchQueue.main.async 
      { 
       do{ 

        let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject] 
        print (json!) 


         // GET DATA FOR TABLE COLUMNS 


          if let arr = json?["allPersonalLeagueStats"] as? [[String:String]] { 
           self.homeTeam = arr.flatMap { $0["player1_team"]!} 
           self.homePlayer = arr.flatMap { $0["player1_name"]!} 
           self.homeGoals = arr.flatMap { $0["player1_goals"]!} 

           self.awayTeam = arr.flatMap { $0["player2_team"]!} 
           self.awayPlayer = arr.flatMap { $0["player2_name"]!} 
           self.awayGoals = arr.flatMap { $0["player2_goals"]!} 

           self.matchId = arr.flatMap { $0["results_id"]!} 
          } 


         self.leagueTableView.reloadData() 
        } 


       catch{ 
        print(error) 
       } 
     } 
    } 
    task.resume() 


} 


} 

追加の列を表示するには、この表に列を追加するにはどうすればよいですか。 home_player,home_goal,away_player,away_team,away_goals

私は、テーブルに次のように表現するための出力をしたいと思います:

+---------------+---------+-------+-------+------------+--------------+ | Bobby Charles | Man Utd | 2 | 3 | Fiorentina| Andrew James | | Ryan Stood | Arsenal | 0 | 1 | Chelsea | Bobby Charles| | Bobby Charles | Chelsea | 0 | 2 | Liverpool | Ryan Stood | +---------------+---------+-------+-------+------------+--------------+

+0

簡単かつ単純です。 – shallowThought

+0

サッカーの試合の結果のリストを本質的に表示したいと思っていたら、最高のアドバイスですか?データベース内の結果テーブルから取り出されます。 – RDowns

+1

カスタムセル(UITableViewCell)を使うことができます。必ずしもUICollectionViewを使用する必要はありません。 –

答えて

1
  1. のUITableViewCell
  2. cellForRowAtindexPathに、あなたはそれぞれに異なる配列を持つように、このセル
  3. に6 UILabelsを追加取るこれらのラベルにデータを追加します。

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    
         let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! MyTableViewCell 
    
         cell.label1.text = self.homeTeam[indexPath.row] 
         cell.label2.text = self.homePlayer[indexPath.row] 
         cell.label3.text = self.homeGoal[indexPath.row] 
         cell.label4.text = self.awayTeam[indexPath.row] 
         cell.label5.text = self.awayPlayer[indexPath.row] 
         cell.label6.text = self.awayGoals[indexPath.row] 
    
         return cell 
    } 
    

注: 多くの配列は良いアイデアではないことを維持します。

使用構造体ではなく、data.itを処理することがcollumns、行だけでなく、 `UICollectionView`代わりに` UITableView`のを使用するようにするに

0

は、あなたが正確に列や行を何を意味するかを確認してください。

cellForRowAtindexPathは非常に不適切です。あなたはそこに何もしていません。

は、あなたの質問に答えるために、あなたは home_playerhome_goalaway_playeraway_teamaway_goalsを付加し、配列を作成し、それに応じて自分の cellForRowAtindexPathでそれらを設定する必要があります。同じことを達成する他の方法もありますが。

注:UITableViewのチュートリアルを読むことをお勧めします。

+0

私は自分の希望する出力を表示するために質問を更新しました。これは 'cellForRowAtindexPath'を使って行うことができますか? – RDowns

関連する問題