【发布时间】:2020-05-18 17:29:15
【问题描述】:
[已解决]
让我解释一下我的问题;
我有一堆 Event 对象出现在 tableView 单元格中。
这些对象存储在事件数组中
var events: [Event]
我还有另一个视图控制器(DetailViewContoller),在那个视图控制器中我有一个用于从 tableview 接收事件对象的变量。
import UIKit
class EventDetailViewController: UIViewController {
var event: Event?
override func viewDidLoad() {
super.viewDidLoad()
print(event?.name)
}
当我点击单元格时,我想将当前事件对象传递给 DetailViewController 中的变量(如上所示)。所以我尝试了这个->
extension EventListViewcontroller:UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// Whenever cells tapped, related object needs to pass DetailViewController
performSegue(withIdentifier: K.Segues.eventListToDetail, sender: self)
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == K.Segues.eventListToDetail {
let VC = segue.destination as! EventDetailViewController
VC.event = events[indexPath.row]
}
}
}
但不幸的是,在我检查 DetailViewController 中的事件变量时执行 segue 后,它显示为 nil。所以问题是,我如何将点击的事件单元格传递给其他视图控制器?
注意:我找到了这个主题How do you test UIStoryBoard segue is triggered by didSelectRow(at:),但它对我的问题没有帮助......
【问题讨论】:
-
你的条件
if segue.identifier == K.Segues.eventListToDetail {是真的吗?如果并设置 VC.event = events[indexPath.row],控制是否会进入内部? -
是的,这是真的,因为当我点击单元格时,它会执行 segue,但会将 event?.name 打印为“nil”:/
-
执行 segue 并不能确认您在 prepareForSegue 中的条件是否满足,在 prepareForSegue 中放置一个断点并检查,我假设发布的代码在这里搞砸了,您确实将 prepareForsegue 作为不同的方法而不是嵌套在
didSelect -
@SandeepBhandari 我确实放置并检查了,我意识到它根本不会触发准备 segue...
-
这是bug,修复它你的问题就解决了