我是 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/