gpt4 book ai didi

ios - 在两个 UIViewController 之间使用 UIStoryBoardSegue 进行重复的 segue 处理

转载 作者:行者123 更新时间:2023-11-30 12:09:53 25 4
gpt4 key购买 nike

我有两个屏幕。第一个是基于 UITableView 实例。当我点击单元格时,函数 tableView(_:didSelectRowAt:)触发器:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedEmg = selectedEmergencies[indexPath.row]
performSegue(withIdentifier: "ShowMoreInfoAboutEmg", sender: self)
}

这是 Storyboard:

storyboard

但事实上,segue “ShowMoreInfoAboutEmg” 会复制自身和第二个屏幕。

enter image description here

我可以剪performSegue(withIdentifier:sender:)并且屏幕之间的转换将正常工作。但是我需要从 UITableViewCell 传输数据实例到远程UIViewController的属性(property)。否则我会得到这样的东西:

enter image description here

prepare(for:sender:)早于tableView(_:didSelectRowAt:)开始工作并且远程 View Controller 从单元格获取零对象。伙计们,有什么建议吗?

决定已找到。

简单实用的UITableView的属性indexPathForSelectedRow .

我没有碰我的 Storyboard,但我删除了 tableView(_:didSelectRowAt:)完全实现,只添加了一行。使用prepare(for:sender:)就够了完全。一般实现如下:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "SomeCustomIdentifier" {
guard let remoteViewController = segue.destination as? CustomViewController else {
fatalError("CustomViewController instance is not found 👎🏻")
}
selectedItem = items[(self.customTableView.indexPathForSelectedRow?.row)!]
remoteViewController.selectedItemFromTable = selectedItem
}
}

最佳答案

也许会简单得多:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedEmg = selectedEmergencies[indexPath.row]
if let vc = storyboard?.instantiateViewController(withIdentifier: "EmgDetailsPresenter") as? EmgDetailsPresenter {
vc.selectedEmgFromTable = selectedEmg
navigationController?.pushViewController(vc, animated: true)
}
}

附注不要忘记删除 Storyboard 中的 segue 并将 Storyboard ID 添加到 EmgDetailsPresenter

关于ios - 在两个 UIViewController 之间使用 UIStoryBoardSegue 进行重复的 segue 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46209019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com