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

标签 ios swift delegates

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

相关文章:

ios - 在项目选择上调用委托(delegate)方法

ios - 快速返回随机字典项

ios - 当 UIWebView 完成加载 Ajax 时获取回调

c# - 为什么委托(delegate)在静态方法中使用时不能引用非静态方法?

swift - 如何使用字典中的所有数据填充 tableView?

SwiftUI 如何更改 Light 主题(外观)上 TextField 的背景颜色?

java - Java 中的条件委托(delegate)

objective-c - iPhone 上不发送 UDP 数据包

ios - 在 ObjC 和 Swift 之间引用不同 Xcode 目标中的常量

iphone - iOS获得与用户设置时间无关的绝对时间?