【发布时间】:2018-08-26 19:46:09
【问题描述】:
我有一个 tableView,我正在尝试通过 segue 将与点击的单元格相关的数据发送到另一个视图。 我的代码仅在第二次点击后才有效,并且在第一次点击时总是返回 nil。我想由于某种原因 prepareForSegue 首先被执行,这就是为什么 detailToSend 在第一次点击时总是为零,而第二次点击我从前一个点击的单元格中获取数据。我怎样才能解决这个问题 ? 更新:
var detailToSend = SingleRepository()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if filteredResult.count > 0 {
detailToSend = filteredResult[indexPath.row]
} else {
detailToSend = finalArrayUnwrapped[indexPath.row]
}
performSegue(withIdentifier: "showDetailSegue", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetailSegue" {
let vc = segue.destination as! DetailViewController
vc.detail = detailToSend
}
}
我的 DetailViewController
class DetailViewController: UIViewController {
@IBOutlet weak var detailLabel: UILabel!
var detail: SingleRepository?
override func viewDidLoad() {
super.viewDidLoad()
if let detailUnwrapped = detail {
print(detailUnwrapped)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
【问题讨论】:
-
确保你的 segue 来自视图控制器对象,而不是单元格本身。您还可以通过在
performSegue调用中将详细信息指定为sender来避免使用detailToSend属性。 -
@Paulw11 我现在看到了问题,我是从单元格而不是视图对象中分离出来的。问题已解决,但我不知道如何获取 detailToSend,您能详细说明一下吗?