我对Swift编程完全陌生,并尝试通过单击发送 {{将一个单独的String
从一个ViewController
委托到另一个button
1}}。问题是,它不起作用...
我想这对您来说很容易解决,并且考虑到如果您向我解释我做错了什么,那将非常有帮助。 :)
非常感谢
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
}
答案 0 :(得分:2)
据我了解,此代码块不起作用,但问题不在代码中,实际上,这是您选择发送数据的方式。在iOS开发中,有多种发送数据的方法。在您的情况下,您需要使用prepareForSegue方法将数据发送到新类,而不必使用委托。
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()
}
}
希望对您有帮助。
答案 1 :(得分:0)
@Eyup Göymen
的答案是正确的。
我有另一种方法,假设您没有使用segue,而是通过手动代码推送到下一个控制器。
因此,您的ThankYouPage
代码应类似于:
import UIKit
class ThankYouPage: UIViewController {
@IBOutlet weak var numbersView: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func someButtonAction(_ sender: Any) { // By clicking on some, you are opening that `New` controller
let detailView = self.storyboard?.instantiateViewController(withIdentifier: "New") as! New
detailView.tydelegate = self
self.navigationController?.pushViewController(detailView, animated: true)
}
}
extension ThankYouPage: protoTYdelegate {
func didSendMessage(message: String) {
numbersView.text = message
}
}