ios - 通过 Swift 中的 segue 将点击的单元格数据传递到另一个视图
问题描述
我有一个 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;如果您从单元格创建 segue,则 segue 将在didSelectRowAt
调用之前触发。
一旦正确设置了segue,就可以使用sender
参数来避免使用detailToSend
属性:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var detailToSend: SingleRepository
if filteredResult.count > 0 {
detailToSend = filteredResult[indexPath.row]
} else {
detailToSend = finalArrayUnwrapped[indexPath.row]
}
performSegue(withIdentifier: "showDetailSegue", sender: detailToSend)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? DetailViewController, let detailToSend = sender as? SingleRepository {
vc.detail = detailToSend
}
}
推荐阅读
- azure - 在 cosmosdb 模拟器“数据库帐户 localhost 不存在”中出现错误 403
- python - 元组中的额外缩进空间
- php - PHP PDO 不保存
- r - creating 2 separate ggplots with same color scale
- .net-core - 如何在 EF Core 3.1 中使用联接
- spring-boot - 如何在一定时间后停止使用 kafkaitemreader 类从 kafka 主题中读取的春季批处理作业
- javascript - 在js中定义文件路径
- machine-learning - 如何在 Octave 中编写 Andrew Ng 作业的成本函数公式?
- angular - Angular9 DHX 电子表格 - 未捕获的类型错误:无法读取未定义的属性“setImmediate”
- azure - 为 Sure DevOps TFS 2020 开发扩展时未找到安全命名空间的权限