【发布时间】:2019-01-18 08:36:39
【问题描述】:
我有点混淆了 swift 中的 abt 委托。比如说,如果我想将 BViewController 中的文本字段的文本传递给 AViewController。 (AViewController 有一个标签,但我没有放任何文本,所以那里什么都没有显示)用户完成输入并单击“LETS GO”按钮后,AViewController 中的标签文本应该显示相同的文本。我实现了代码,但它给了我一些错误。谢谢。
代码:
import UIKit
class AViewController: UIViewController, BViewDelegate {
@IBOutlet weak var labelTextData: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
func userDoneInput(textData: String) {
labelTextData.text = textData
}
}
import UIKit
protocol BViewDelegate{
func userDoneInput(textData: String)
}
class BViewController: UIViewController {
@IBOutlet weak var UserInputText: UITextField!
var bViewDelegate: BViewDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func LetsGo(_ sender: UIButton) {
self.performSegue(withIdentifier: "ShowData", sender: self)
}
//use segue
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ShowData" {
let destination = segue.destination as! AViewController
destination.labelTextData.text = UserInputText.text
}
}
}
【问题讨论】:
-
您创建了一个循环流。通常,您使用委托将数据从堆栈顶部的视图控制器传递到堆栈下方的视图控制器(A 调用 B,并且您希望将数据从 B 传递回 A)。在您的示例中,您再次堆叠 A(请记住它是一个新实例)并使用 prepare for segue 向前传递数据。在您的示例中,您没有使用委托。
标签: swift segue protocols delegation