在 TableViewDelegate 方法中准备 segue

Prepare for segue in TableViewDelegate methods

[已解决]

让我解释一下我的问题;

我有一堆事件对象出现在 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:) 但它对我的问题没有帮助...

在你的class

class ViewController: EventListViewcontroller {
     var selectedIndex: IndexPath? = nil
}

并将 didSelect 中的代码更改为

extension ViewController:UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        // Whenever cells tapped, related object needs to pass DetailViewController
        self.selectedIndex = indexPath
        performSegue(withIdentifier: K.Segues.eventListToDetail, sender: self)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let indexPath = self. selectedIndex, segue.identifier == K.Segues.eventListToDetail {
            let VC = segue.destination as! EventDetailViewController
            VC.event = events[indexPath.row]
        }
    }
}

希望对您有所帮助