以编程方式设置Storyboard ID

时间:2018-05-25 18:22:37

标签: ios swift

我在一个团队工作,我需要的一个故事板是以编程方式完成的,这很好。我目前正在尝试使用委托从一个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,要么就如何正确设置我的委托获得任何其他建议。

1 个答案:

答案 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进行通信,您可能希望使用代理人,但是您的问题并不清楚这是您想要做的事情。

相关问题