【问题标题】:Assign a delegate to instance of a class将委托分配给类的实例
【发布时间】:2019-02-23 08:41:48
【问题描述】:

大家好,希望你们做得很好。我有疑问,当我尝试使用自定义委托函数时,如果不使用准备 segue 或当前视图控制器就不会调用回调函数,如果这两个概念仅用于直接处理前后控制器,是否有可能实现这一点.简单地说,我有 3 个视图控制器,当我在第 3 个视图控制器中执行某些操作时,我想更新我的第一个视图控制器标签。可以通过委托吗?请帮助我,我在过去两天一直在苦苦挣扎,我找不到答案,所以请指导我。

这是我的代码 在我的第三个视图控制器中

protocol ThirdViewControllerDelegate: class {    
    func updateLabel(title: String)
}

然后我创建了一个属性weak var delegate: ThirdViewControllerDelegate?

我已经在

中赋值了
@IBAction func thirdControllerButtonTapped(_ sender: UIButton) {        
    delegate?.updateLabel(title: "iOS_Developer")

    dismiss(animated: true, completion: nil)
}

我已经在我的第一个视图控制器中采用了这个委托,并且

lazy var thirdController = ThirdViewController()
thirdController.delegate = self

func updateLabel(title: String) {
    print("Your updated Label is \(title)")
}

但是这个函数没有被调用。在这里我如何设置委托参考所以请帮助我。

【问题讨论】:

  • 您在第一个视图控制器的哪个位置设置委托?以及如何导航到thirdController
  • 您在 var 声明中创建了一个新的 ThirdViewController() ,而不是正在访问的那个,可能是由情节提要。在您的 prepareForSegue: 函数中,获取目标视图控制器,然后设置委托。
  • 我正在使用@DávidPásztor self.present(FirstViewController, animated: true, completion: nil) 展示控制器
  • 我不想使用准备 segue 或呈现视图控制器。是否可以通过我创建委托@JonJ的类的实例来实现
  • 你能分享一下视图控制器的相关代码吗?显示设置委托、使用它以及推送和弹出操作?

标签: ios swift delegates


【解决方案1】:
override func prepare(for segue: UIStoryboardSegue, 
      sender: Any?) {
    if let vc = segue.destination as? ThirdViewController {
        vc.delegate = self
    }
}

或:

let vc = ThirdViewController()
vc.delegate = self
self.navigationController?.pushViewController(vc, animated: true)

https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621887-pushviewcontroller

这是一张图,希望能展示视图控制器如何通过委托相互通信:

【讨论】:

  • 你能分享这个作为例子吗?我无法理解在第三个视图控制器中我在启动第一个控制器后向第一个控制器显示一个值,但是在这里我如何像 vc.delegate = self 一样进行引用,因为我在thirdviewcontroller 中有它
  • 我添加了一个显示代理通信的图表。
  • 感谢您的回复@JonJ。我可以理解我们可以通过 Push 分配委托或使用导航呈现 viewController 但这里我想要的是从第三个视图控制器访问数据到第一个视图控制器。那么如何在最后一个视图控制器中为第一个控制器设置委托我正在使用当前方法呈现视图控制器所以请帮助我,我是 ios 开发的新人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多