我在一个团队工作,我需要的一个故事板是以编程方式完成的,这很好。我目前正在尝试使用委托从一个viewcontroller(以编程方式完成的VC)到另一个(界面构建器构建的故事板)传递数据。
一个VC(发件人)的代码是:
protocol setDelegate {
func passData(_ area: String, _ location: String)
}
class ProgramaticVC : UIViewController {
var delegate: setDelegate?
...
func passData() {
self.delegate?.passData(area, location)
let interfaceBuilderVC = UIStoryboard.init("Main", nil).instantiateViewController("interfaceBuilderVC") as! InterfaceBuilderVC
show(interfaceBuilderVC, nil)
}
收件人代码:
class InterfaceBuilderVC : UIViewController {
...
func passData(_ area: String, _ location: String) {
areaLabel.text = area
locationLabel.text = location
// Not sure how to set the delegate, but what I was thinking:
let programmaticVC = UIStoryboard.init("Main", nil).instantiateViewController("CAN'T SET ID") as! ProgrammaticVC
programmaticVC.delegate = self
}
所以我要么以编程方式设置故事板的ID,要么就如何正确设置我的委托获得任何其他建议。
答案 0 :(得分:0)
如果您只想将数据从一个视图控制器发送到另一个视图控制器,则没有理由使用委托。你可以这样做:
class ProgramaticVC : UIViewController {
func passData() {
let interfaceBuilderVC = UIStoryboard.init("Main", nil).instantiateViewController("interfaceBuilderVC") as! InterfaceBuilderVC
interfaceBuilderVC.area = area
interfaceBuilderVC.location = location
show(interfaceBuilderVC, nil)
}
}
和
class InterfaceBuilderVC : UIViewController {
var area: String?
var location: String?
}
如果InterfaceBuilderVC
需要与ProgramaticVC
进行通信,您可能希望使用代理人,但是您的问题并不清楚这是您想要做的事情。