在 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]
}
}
}
希望对您有所帮助
[已解决]
让我解释一下我的问题;
我有一堆事件对象出现在 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]
}
}
}
希望对您有所帮助