传递所选单元格的标签文本,第一次返回nil(数据发送延迟)

问题描述:

我将选定单元格的标签文本传递给另一个视图控制器,但每次第一次选择时它都会返回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! 
} 

EditTimeTableVC

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

didSelectRowAt方法您呼叫self.performSegue第一,然后设置jobDateValueB。尝试移动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 
     } 
    } 
}