2017-09-02 10 views
1

選択したセルのラベルテキストを別のビューコントローラに渡しますが、最初に選択するたびにnilが返されます。その後、私は戻って、再び選択する、私は前の選択したセルのテキストを取得します。なぜですか?選択したセルのラベルテキストを渡すと、最初にnilを返します(データの送信遅延)

var jobDateValueB:String! 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return jobTime.count //JSON Data from server 
} 


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "jobCell", for: indexPath) 
    let unixTimestamp = Double(jobTime[indexPath.row]) 
    let unixTimestamp2 = Double(jobEndTime[indexPath.row]) 
    let date1 = Date(timeIntervalSince1970: unixTimestamp) 
    let date2 = Date(timeIntervalSince1970: unixTimestamp2) 
    dateFormatter.dateFormat = "h:mm a" 
    let strDate = dateFormatter.string(from: date1) 
    let endDate = dateFormatter.string(from: date2) 
    cell.textLabel?.text = "\(strDate) - \(endDate)" 

    return cell 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "showEdit"{ 
     let destinationB = segue.destination as? EditTimeTableVC 
     destinationB?.passedDataB = jobDateValueB 

    } 
} 

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    self.performSegue(withIdentifier: "showEdit", sender: self) 
    let indexPath = self.tableView.indexPathForSelectedRow; 
    let currentCell = self.tableView.cellForRow(at: indexPath!) as UITableViewCell!; 
    jobDateValueB = currentCell?.textLabel!.text! 
} 

あなたが最初self.performSegueを呼び出し、その後jobDateValueBを設定している

var passedDataB: String! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    print(passedDataB) 
} 

答えて

0

didSelectRowAt方法でEditTimeTableVC。関数の最後にself.performSegueコールを移動してみてください。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let indexPath = self.tableView.indexPathForSelectedRow; 
    let currentCell = self.tableView.cellForRow(at: indexPath!) as UITableViewCell!; 
    jobDateValueB = currentCell?.textLabel!.text! 
    self.performSegue(withIdentifier: "showEdit", sender: self) 
} 

これは問題を解決するはずですが、推奨される方法ではありません。選択したテキスト値をクラス変数に代入するのではなく、送信者として渡します。このような。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {   
    let indexPath = self.tableView.indexPathForSelectedRow; 
    let currentCell = self.tableView.cellForRow(at: indexPath!) as UITableViewCell!; 
    if let value = currentCell?.textLabel?.text? { 
     self.performSegue(withIdentifier: "showEdit", sender: value) 
    } 
} 

あなたのprepareメソッドで行うことができます。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "showEdit"{ 
     let destinationB = segue.destination as? EditTimeTableVC 
     if let selectedText = sender as? String { 
      destinationB?.passedDataB = selectedText 
     } 
    } 
} 
関連する問題