2017-07-18 1 views
0

私はすでに新しい3つ目のobjetive cで新しくなっています。今は別のテーブルビューコントローラに各行のIDを渡すことができますか?ユーザーが移動したい行のタップします。ここでjson idを1つのテーブルビューコントローラから別のテーブルビューコントローラにスウィフト3で渡す

は、JSONデータfirstFileである:ここで

[ 
{"id_categoria":"1","totalRows":"323","nombre_categoria":"Cirug\u00eda"}, 
{"id_categoria":"2","totalRows":"312","nombre_categoria":"Med Interna"}, 
{"id_categoria":"3","totalRows":"6","nombre_categoria":"Anatomia"}, 
{"id_categoria":"4","totalRows":"24","nombre_categoria":"Anestesiologia"}, 
...] 

は私の最初のテーブルビューコントローラです:

import UIKit 

class CatMedVC: UIViewController, UITableViewDataSource { 
    @IBAction func volver(_ sender: Any) { } 
    @IBOutlet weak var listaCategoria: UITableView! 

    var fetchedCategoria = [Categoria]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     listaCategoria.dataSource = self 
     parseData() 
    } 

    override var prefersStatusBarHidden: Bool{ 
     return true 
    } 

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return fetchedCategoria.count 
    } 
    public func tableView(_ tableView: UITableView, cellForRowAt IndexPath: IndexPath) -> 
     UITableViewCell { 
      let cell = listaCategoria.dequeueReusableCell(withIdentifier: "cell") 

      cell?.textLabel?.text = fetchedCategoria[IndexPath.row].esp 
      cell?.detailTextLabel?.text = fetchedCategoria [IndexPath.row].totalRows 

      return cell! 
    } 


    func parseData() { 
     let url = "http://www.url.com/firstFile.php" //in json format 
     var request = URLRequest(url: URL(string: url)!) 
     request.httpMethod = "GET" 

     let configuration = URLSessionConfiguration.default 
     let session = URLSession(configuration: configuration, delegate: nil, delegateQueue: OperationQueue.main) 

     let task = session.dataTask(with: request) { (data, response, error) in 

      if(error != nil) { 
       print("Error") 
      } 
      else { 
       do { 
        let fetchedData = try JSONSerialization.jsonObject(with:data!, options: .mutableLeaves) as! NSArray 
        //print(fetchedData) 

        for eachFetchedCategoria in fetchedData { 
         let eachCategoria = eachFetchedCategoria as! [String : Any] 
         let nombre_categoria = eachCategoria["nombre_categoria"] as! String 
         let totalRows = eachCategoria["totalRows"] as! String 
         let id_categoria = eachCategoria["id_categoria"] as! String 

         self.fetchedCategoria.append(Categoria(nombre_categoria: nombre_categoria, totalRows: totalRows, id_categoria: id_categoria)) 
        } 
        //print(self.fetchedCategoria) 

        self.listaCategoria.reloadData() 
       } 
       catch { 
        print("Error 2") 
       } 
      } 
     } 
     task.resume() 
    } 
} 

class Categoria { 
    var nombre_categoria : String 
    var totalRows : String 
    var id_categoria : String 

    init(nombre_categoria : String, totalRows : String, id_categoria : String) { 
     self.nombre_categoria = nombre_categoria 
     self.totalRows = totalRows 
     self.id_categoria = id_categoria 
    } 
} 

だから私は示すために、別のテーブルビューにid_categoria文字列を渡す必要があります前に選択したidのデータ...ここで私はそれを行う方法がわかりません...私は以前選択されたIDを待っているjsonファイルを持っています。しかし、私はURLにそれをキャッチする方法を知らない

ここでは第2のテーブルビュー:

import UIKit 

class EspMedVC: UITableViewController { 

    var TableData:Array<String> = Array <String>() 

    var EspecialidadArray = [String]() 

    @IBAction func volver(_ sender: Any) { 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     get_data_from_url("http://www.url.com/secondFile.php?id=") // Here I need to put the id_categoria String in json format 
    } 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return TableData.count 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell2", for: indexPath) 
     cell.textLabel?.text = TableData[indexPath.row] 
     return cell 
    } 

    func get_data_from_url(_ link:String) 
    { 
     let url:URL = URL(string: link)! 
     let session = URLSession.shared 

     let request = NSMutableURLRequest(url: url) 
     request.httpMethod = "GET" 
     request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData 


     let task = session.dataTask(with: request as URLRequest, completionHandler: { 
      (
      data, response, error) in 

      guard let _:Data = data, let _:URLResponse = response , error == nil else { 
       return 
      } 
      self.extract_json(data!) 
     }) 

     task.resume() 
    } 


    func extract_json(_ data: Data) 
    { 
     let json: Any? 

     do 
     { 
      json = try JSONSerialization.jsonObject(with: data, options: []) 
     } 
     catch 
     { 
      return 
     } 

     guard let data_list = json as? NSArray else 
     { 
      return 
     } 


     if let nombre_especialidad = json as? NSArray 
     { 
      for i in 0 ..< data_list.count 
      { 
       if let nombre_esp_obj = nombre_especialidad[i] as? NSDictionary 
       { 
        if let nombre_especialidad = nombre_esp_obj["subesp"] as? String 
        { 
         if let totalRows = nombre_esp_obj["totalRows"] as? String 
         { 
          TableData.append(nombre_especialidad + " [" + totalRows + "]") 
         } 
        } 
       } 
      } 
     } 
     DispatchQueue.main.async(execute: {self.do_table_refresh()}) 
    } 

    func do_table_refresh() 
    { 
     self.tableView.reloadData() 
    } 
} 
+0

2番目のテーブルビューは、別のView Controllerにありますか? – Pochi

+0

@ Pochiはい、最初のものは:** CatMedVC **と第2:** EspMedVC ** –

+0

あなたはどのようにEspMedVCに移動しますか? – Pochi

答えて

0

これは目安で、ここstackoverflowの内部の他の質問で、マニュアルまたはのメソッドを検索してください。

1) "id_categoria String"が表示される変数を、EspMedVCの中に追加します。

2)ユーザが選択した "id_categoria String"を保持するCatMedVCの中に変数を追加します。

3)あなたのCatMedVC内部「prepareForSegue」メソッドを実装します)このメソッド内で手順2

4上の変数セットを設定する必要があり、「CatMedVC」内部あなたのテーブルビューから「didSelectRow」デリゲートメソッドを実装、あなたが先VCを取得する必要があり、実装の内部で、EspMedVCあなたが今のステップに変数セットを使用することができますから「のviewDidLoad」で)それは「EspMedVC」に、ステップ1

5から変数を設定するキャスト2を使用してJSONを照会し、それに応じてテーブルビューを更新します。

関連する問題