gpt4 book ai didi

ios - 将数据从 View Controller 传递到 MVC 中的 View - Swift

转载 作者:行者123 更新时间:2023-11-29 05:48:45 25 4
gpt4 key购买 nike

UIViewControllers之间传递数据相当简单,但是将数据从 Controller 传递到 View 是我似乎无法弄清楚的。

在我的特定情况下,用户点击“事件”单元格,然后转换到详细 View 。

如何将“事件”从点击的单元格传递到详细信息 View ?

// Inside Starting View Controller
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let vc = EventDetailController()
let vcView = vc.view as! EventDetailView
vcView.event = model.events[indexPath.item]
navigationController?.pushViewController(vc, animated: true)
}



// Second View
class EventDetailView: UIView {

var event: Event?
let model = EventsModel()

override init(frame: CGRect) {
super.init(frame: frame)
print("selected event: \(event)") <<<<--- Prints "nil"
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}


// Second Controller
class EventDetailController: UIViewController {

var eventDetailView: EventDetailView!

override func loadView() {
super.loadView()
view = eventDetailView
}

override func viewDidLoad() {
super.viewDidLoad()
}
}

最佳答案

您传递的数据不是正确的方法。在 View 正确显示或加载之前,您不应该访问该 View 。

在您的类EventDetailController中添加属性

var event: Event?     

并像下面这样替换这个方法

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let vc = EventDetailController()
vc.event = model.events[indexPath.item]
navigationController?.pushViewController(vc, animated: true)
}

override func viewDidLoad() {
super.viewDidLoad()
eventDetailView.event = self.event
}

希望对你有帮助

编辑

在加载 View 方法中,在方法的开头添加以下行

 `eventDetailView = EventDetailView(frame:CGRect(x:0,y:0,width:UIScreen.main.bounds.width,height:UIScreen.main.bounds.height))`     

关于ios - 将数据从 View Controller 传递到 MVC 中的 View - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55877029/

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