传递选定单元格的标签文本,return 第一次时为零(数据发送延迟)
Passing selected cell's label text, return nil when first time (delay in data sent)
我正在将 selected 单元格的标签文本传递给另一个视图控制器,但是当我第一次 select 时它会 return nil。之后我返回并再次 select,我将获得前一个 selected 单元格的 text.Why?
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)
}
这应该可以解决您的问题,但这不是推荐的方法。不是将选定的文本值分配给 class 变量,而是将其作为发件人传递。像这样。
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
}
}
}
我正在将 selected 单元格的标签文本传递给另一个视图控制器,但是当我第一次 select 时它会 return nil。之后我返回并再次 select,我将获得前一个 selected 单元格的 text.Why?
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)
}
这应该可以解决您的问题,但这不是推荐的方法。不是将选定的文本值分配给 class 变量,而是将其作为发件人传递。像这样。
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
}
}
}