我有2个视图控制器VCAVCB
从某个值从VCA移到VCB正常工作

let vc = self.storyboard?.instantiateViewControllerWithIdentifier("VCB") as! VCB
vc.entity = somevalue
self.navigationController?.pushViewController(vc, animated: true)


但反过来,我想从VCA上载某些数据后,从VCB调用VCB中的方法。然后刷新VCA中的文本字段值。我本可以在VCA中出现viewview中出现的刷新代码,但是由于某些原因,我没有这样做,而是尝试实现委托。
我写了一些代码为:

VCA:

class ProfileEditViewController:UIViewControoler, MobileVerifyDelegate{
override func viewDidLoad() {

    super.viewDidLoad()
    let mobileVC = MobileVerificationViewController()
    mobileVC.delegate = self
}

//MARK: - Mobileverify Delegate method
func delegateMethod() {
    print("a")

}
}


VCB:

    protocol MobileVerifyDelegate{
    func delegateMethod()
}


class MobileVerificationViewController: UIViewController{
 var delegate: MobileVerifyDelegate! = nil
func certainFunction(){
     //aftersuccessful upload
     self?.delegate.delegateMethod()// code crashes
}
}


提前致谢

最佳答案

在VCA的viewDidLoad中,您已经创建了mobileVC,但是当过渡到VCB时,您正在创建一个名为vc的VCB新实例。 mobileVC未被使用。您有几种选择:

mobileVC设置为类属性,或在创建vc时设置委托。

后者为:

let vc = self.storyboard?.instantiateViewControllerWithIdentifier("VCB") as! VCB
vc.entity = someValue
vc.delegate = self
self.navigationController?.pushViewController(vc, animated: true)


在旁注中,让您的代表确认类协议,以便可以将代表设置为弱。

protocol MobileVerifyDelegate: class {
    func delegateMethod()
}

class MobileVerificationViewController: UIViewController {
    weak var delegate: MobileVerifyDelegate?

    func certainFunction() {

        // After successful upload
        delegate?.delegateMethod()
    }
}


请注意,当您设置隐式展开属性时,它已经是nil。因此,再次将其设置为nil是多余的。

var delegate: MobileVerifyDelegate! = nil // "= nil" is not needed

关于ios - swift 在 View Controller 之间委托(delegate)实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34938870/

10-15 15:20