我有2个视图控制器VCA
和VCB
。
从某个值从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/