gpt4 book ai didi

ios - 将数据从一个 UIViewController 委托(delegate)给另一个

转载 作者:行者123 更新时间:2023-11-28 11:33:20 24 4
gpt4 key购买 nike

我是 Swift 编程的新手,我尝试通过单击 send 从一个 ViewController delegate 一个 String 到另一个 按钮。问题是,它不起作用...

我想你会很容易解决这个问题,考虑到如果你向我解释我做错了什么会很有帮助。 :)

非常感谢

import UIKit


protocol protoTYdelegate {
func didSendMessage(message: String)
}


class New: UIViewController {

@IBOutlet weak var SendButton: UIButton!

var tydelegate: protoTYdelegate?

override func viewDidLoad() {
super.viewDidLoad()

}





@IBAction func SendButtonAction(_ sender: Any) {

let nachricht = "It works fine."
tydelegate?.didSendMessage(message: nachricht)

}

}

import UIKit


class ThankYouPage: UIViewController {


@IBOutlet weak var numbersView: UILabel!

override func viewDidLoad() {
super.viewDidLoad()

let controller = New()
controller.tydelegate = self

}

}

extension ThankYouPage: protoTYdelegate{
func didSendMessage(message: String) {
numbersView.text = message
}

最佳答案

据我了解,此代码块不起作用,但问题不在代码中,实际上是您选择发送数据的方式。在iOS开发中,发送数据的方式有很多种。在您的情况下,您需要使用 prepareForSegue 方法将数据发送到新类,而不必使用委托(delegate)。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "ThankYouPage") {
let vc = segue.destination as! ThankYouPage
vc.message = "Message that you want to send"
}
}

并且您需要将 ThankYouPage 实现为:

class ThankYouPage: UIViewController {

@IBOutlet weak var numbersView: UILabel!
var message = ""

override func viewDidLoad() {
super.viewDidLoad()

numbersView.text = message
}

}

除此之外,您可以使用 didSet 方法将消息打印到标签,而不是直接在 viewDidLoad 方法中打印。简单地:

class ThankYouPage: UIViewController {

@IBOutlet weak var numbersView: UILabel!
var message: String?{
didSet{
numbersView.text = message
}
}

override func viewDidLoad() {
super.viewDidLoad()
}

}

希望对你有帮助

关于ios - 将数据从一个 UIViewController 委托(delegate)给另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56307558/

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