gpt4 book ai didi

ios - 快速在 View Controller 之间委托(delegate)实现

转载 作者:行者123 更新时间:2023-11-30 13:45:57 28 4
gpt4 key购买 nike

我有 2 个 View Controller VCAVCB。从 VCA 迁移到 VCB,具有一定的值(value),工作正常

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

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

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
}
}

提前致谢

最佳答案

在您的 viewDidLoad 中您创建的 VCA mobileVC但是当您转换到 VCB 时,您将创建一个名为 vc 的 VCB 新实例。 。 mobileVC未按原样使用。您有几个选择:

制作mobileVC类属性或在创建 vc 时设置委托(delegate).

后者将是:

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

顺便说一句,让您的委托(delegate)确认类协议(protocol),以便您可以将委托(delegate)设置为弱。

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 - 快速在 View Controller 之间委托(delegate)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34938870/

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