为TableViewDelegate方法中的序列做准备

问题描述 投票:0回答:1

让我解释一下我的问题;

我有一堆Event对象出现在tableView单元格中。enter image description here

这些对象存储在事件数组中

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:),但它对我的问题没有帮助...

ios swift tableview segue
1个回答
0
投票

prepareForSegue移出didSelectRowAt

您仍可以使用IndexPathindexPathForSelectedRow属性获得当前选择的UITableView

func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == K.Segues.eventListToDetail {
        if let vc = segue.destination as? EventDetailViewController,
            let indexPath = tableView.indexPathForSelectedRow {
            vc.event = events[indexPath.row]
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.