gpt4 book ai didi

ios - 在没有 Segue 或程序化调用的情况下分配委托(delegate)

转载 作者:搜寻专家 更新时间:2023-11-01 06:42:00 24 4
gpt4 key购买 nike

我需要 VC3 才能向 VC1 发送函数调用!

我了解委托(delegate)的基础知识,我刚刚阅读了本指南,了解如何在没有 prepareForSegue 的情况下分配委托(delegate):

Swift Delegate Between Two VCs Without Segue

但是如果两者之间有一个 VC 需要交谈怎么办?例如,VC1 呈现 VC2,而 VC2 呈现 VC3。 VC3 希望 VC1 做一些工作。在 VC2 中没有 segue 和程序化 VC3 调用的情况下,我该如何完成此操作?

最佳答案

如果您想继续使用委托(delegate)模式,您需要更新 VC2 以传递委托(delegate)回调。

因此使用您发布的那个示例中的代码:

ViewControllerOne:

class ViewControllerOne: UIViewController,testProtocol {

@IBAction func btInit(sender: AnyObject) {
println("Bt Init")

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let viewController2: ViewControllerTwo = storyBoard.instantiateViewControllerWithIdentifier("viewTarget") as ViewControllerTwo
viewController2.viewController1 = self
self.presentViewController(initViewController,animated: false, nil)

}

func testDelegate(){
println(" in my view controller delegate ")
}

}

ViewControllerTwo:

class ViewControllerTwo: UIViewController,testProtocol {

var viewController1: ViewControllerOne? = ViewControllerOne()

@IBAction func btInit(sender: AnyObject) {
println("Bt Init")

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let viewController3: ViewControllerThree = storyBoard.instantiateViewControllerWithIdentifier("viewTarget") as ViewControllerThree
viewController3.delegate = viewController1
self.presentViewController(initViewController,animated: false, nil)

}

}

ViewControllerThree:

protocol testProtocol {
func testDelegate() // this function the first controllers
}

class ViewControllerThree: UIViewController {

@IBAction func BtTarget(sender: AnyObject) {

println("bt target pressed")

delegate?.testDelegate()
}

var delegate : testProtocol?
}

更好的选择

就我个人而言,我不喜欢这种方法,因为它在 ViewControllerTwo 上添加了不必要的耦合,来自其他两个需要通信的 VC,因此 IMO 更好的替代方法是通过使用观察者模式NSNotification 使得 VC1 注册为通知的监听器,然后在稍后的某个时间点,VC3 发布通知(以及可选的任何数据),VC1 接收它并做任何它需要做的事情。

关于ios - 在没有 Segue 或程序化调用的情况下分配委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34072932/

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