2017-08-11 2 views
0

私の配列は、tableviewです。テーブルには文字列の配列が表示されます。配列内の80以上の文字列。uiTableViewで選択した文字列をArrayからuILabelに新しいViewControllerで渡します

今、私は行を選択し、明らかにその行の文字列をViewControlleruiLabelに渡したいと思います。

placeTypesは私の宣言された配列で、このコードには載っていません。ちょうど84文字列の配列を想像してください!私のsegueIdentifierはA < - easy peasyです。 passedStringuiLabelです。これは、...渡された文字列データを受け取ります。

テーブルビューコード

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


    return placeTypes.count 
} 


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

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 

    cell.textLabel?.text = placeTypes[indexPath.row] 

    return cell 
} 

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    NSLog("You selected cell number: \(indexPath.row)!") 

    performSegue(withIdentifier: "A", sender: self) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "A" { 
    // let viewController = segue.destination as? ViewController 

     // SOMEHOW PASS THE SELECTED STRING IN THE SELECTED ROW TO THE VIEW CONTROLLER 

    } 


} 

オーケー、今私のViewControllerコード

@IBOutlet weak var passedString: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

} 

編集:私はまだエラーを取得しています。更新されたsegueの準備では、placeType [indexPath.row]の未解決の識別子を使用し、viewControllerはsendString変数がないことを伝えています。

答えて

0

didSelectRowAtにはインデックスパスを送信者として、prepareにはIndexPathにキャストできます。これを試して。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    NSLog("You selected cell number: \(indexPath.row)!") 

    performSegue(withIdentifier: "A", sender: indexPath) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "A" { 

     let indexPath = sender as? IndexPath { 

      let yourText = placeTypes[indexPath.row] 

      // let viewController = segue.destination as? ViewController    
      // SOMEHOW PASS THE SELECTED STRING IN THE SELECTED ROW TO THE VIEW CONTROLLER 
     }          
    }     
} 
1
class TableViewController: UITableViewController { 

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     print("Row number: \(indexPath.row)") 
     performSegue(withIdentifier: "A", sender: indexPath) 
} 


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     if segue.identifier == "A" { 
      if let viewController = segue.destination as ViewController, 
       let indexPath = sender as IndexPath { 
       viewController.sendString = placeTypes[indexPath.row] 
      } 
     } 
    } 
} 


class ViewController : UIViewController { 
    @IBOutlet weak var passedString: UILabel! 
    // Put the string you need to send in a separate var 
    // You can't rely on the view controller being properly initalized 
    var sendString: String? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     if let sendString = sendString { 
      passedString.text = sendString 
     } 
    } 
} 

また、伝説のポテトを見てみることができます:https://github.com/ryantxr/legendary-potato

+0

興味深いです。私はエラーが発生しています。 segueを実行する際にindexPathに未解決の識別子を使用する。 –

+0

回答が更新されました。 – ryantxr

関連する問題