2016-11-05 75 views
-2

我有一個用戶從UITable中選擇的實例。所選記錄有一個name和一個id與它關聯。如何從UITable DidSelectAtRow提取變量?

目前核實姓名和ID被正確地報道我使用

let tempCountryId = (self.newCountries[cellCountryId!]) 
    print (tempCountryId) 

國家(名稱:可選( 「英格蘭」),countryId:可選( 「5」))

我希望能夠是countryId存儲在一個變量,所以我可以重新填充我的數據(足球部門)UITable匹配countryId「5」

我怎麼做是個是什麼?

這是我完整的腳本:

import UIKit 

class PickTeamViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet weak var teamsTableView: UITableView! 

var pickedCountryID: Int? 

var selectedCellCountryTitle: String? 
var cellCountryId: Int? 

struct Country { 
    var name: String? 
    var countryId: String? 

    init(_ dictionary: [String : String]) { 
     self.name = dictionary["name"] 
     self.countryId = dictionary["id"] 
    } 
} 


struct Divisions { 
    var divisionName: String? 
    var divisionId: String? 
    init(_ dictionary: [String : String]) { 

     self.divisionName = dictionary["name"] 
     self.divisionId = dictionary["country_id"] 
    } 
} 

struct Teams { 
    var teamName: String? 
    var newTeamId: String? 

    init(_ dictionary: [String : String]) { 
     self.teamName = dictionary["name"] 

    } 
} 

struct TeamId { 

    var newTeamId: String? 

    init(_ dictionary: [String : String]) { 
     self.newTeamId = dictionary["id"] 

    } 
} 

var newCountries = [Country]() 
var newDivisions = [Divisions]() 
var newTeams = [Teams]() 
var newTeamId = [TeamId]() 

override func viewDidAppear(_ animated: Bool) { 


    let myUrl = URL(string: "http://www.quasisquest.uk/KeepScore/getTeams.php?"); 
    var request = URLRequest(url:myUrl!); 
    request.httpMethod = "GET"; 

    let task = URLSession.shared.dataTask(with: myUrl!) { (data: Data?, response: URLResponse?, error: Error?) in 

     DispatchQueue.main.async 
      { 

       if error != nil { 
        print("error=\(error)") 
        return 
       } 

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

        if let arr = json?["countries"] as? [[String:String]] { 
         self.newCountries = arr.flatMap { Country($0) } 
         self.teamsTableView.reloadData() 

        } 


        if let arr = json?["divisions"] as? [[String:String]] { 
         self.newDivisions = arr.flatMap { Divisions($0) } 

        } 




        if let arr = json?["teams"] as? [[String:String]] { 
         self.newTeams = arr.flatMap { Teams($0) } 

        } 


        self.teamsTableView.reloadData() 
       } catch{ 
        print(error) 
       } 
     } 
    } 
    task.resume() 


} 


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

    return self.newCountries.count 
} 

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

    let country = newCountries[indexPath.row] 
    let cell = UITableViewCell() 

    cell.textLabel?.text = country.name 
    cell.textLabel?.font = UIFont(name: "Avenir", size: 12) 
    cell.textLabel?.textColor = UIColor.black 
    cell.backgroundColor = UIColor.white 

    return cell 

} 

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

    cellCountryId = indexPath.row 
    // print (self.newCountries[cellCountryId!]) 
    let tempCountryId = (self.newCountries[cellCountryId!]) 
    print (tempCountryId) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.teamsTableView.delegate = self 
    self.teamsTableView.dataSource = self 

    // Do any additional setup after loading the view. 
} 


} 
+0

如果所選記錄已經在所選記錄中又名「TableViewCell」,那麼你想在哪裏顯示它? – Adeel

+0

我不確定你的意思。但理想情況下,當選擇記錄時,將使用countryId'5'來刷新UITable與單獨數組中的數據,我也存儲了 – RDowns

+0

是否要顯示在相同的國家/地區選擇的詳細信息'TableView'? – Adeel

回答

0

正如在評論中所討論的,您應該使用另一個視圖控制器來顯示細節。在didSelectRowAtIndexPath方法從newCountries數組中取出所選國家並將其傳遞到DetailViewController

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let countryDetailsVC = self.storyboard?.instantiateViewController(withIdentifier: "CountryDetailsViewController") as! DetailViewController 
    countryDetailsVC.country = selectedCountry 
    present(countryDetailsVC, animated: true, completion: nil) 
} 

現在你已經在全國Struct可以顯示其在DetailViewController細節。

0

你的表從陣列newCountries填充。因此,要替換表格的內容,您需要替換newCountries的內容並重新加載表格。

但這不是一個非常明智的策略。用不同的表格和不同的數據陣列顯示不同的視圖控制器會更好。

+0

好的,我會考慮這樣做,謝謝。 – RDowns

+0

儘管我仍然需要這個變量,我最初問的是將ale傳遞給我的下一個視圖控制器。 – RDowns