[英]Delegate Method Swift not working correctly
我試圖使我的視圖控制器相互通信並傳遞可以相互更改的值。 在這種特殊情況下,我試圖將值從第一個控制器傳遞到第二個控制器,更改第二個控制器中的值,然后將值從第二個控制器傳遞回第一個控制器。 我可以執行第1步和第2步,但是第3步不起作用,當我嘗試獲取更改的值時,當它到達viewDidLoad()時它沒有更改。 這是示例代碼:
//first controller
class OpenViewController: UIViewController, UpdateDelegate {
var text: String!
func save(controller: ViewController, text2: String) {
text = text2//set the new value of text to text2
controller.navigationController?.popViewControllerAnimated(true)
println(text)
}
override func viewDidLoad() {
super.viewDidLoad()
if(text.isEmpty) { //if text is empty set value to hi
text = "hi"
}
else{
print(text)
}
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ToList" {
var vc = segue.destinationViewController as! ViewController
vc.text2 = text
vc.delegate = self
}
}
}
}
//second controller
protocol UpdateDelegate{
func save(controller: ViewController, text2: String)
}
class ViewController: UIViewController {
var delegate: UpdateDelegate? = nil
var text2: String!
@IBAction func home(sender: AnyObject) { //button click to go back to first view controller
delegate!.save(self, text2: String) //save the updated value into first view controller
}
override func viewDidLoad() {
super.viewDidLoad()
self.text2 = text! //set value of text2 to the value of text from previous view controller
self.text2 = "bye"//change text2 value to "bye"
}
}
打印語句可以檢查它是否按預期工作。 save函數中的println(text)實際上顯示文本的text2值已更改,但是當它下降到OpenViewController中的viewDidLoad()時,文本現在又為空。 我對委托的印象是,OpenViewController中的text的值將是ViewController中的text2。
通常,您可能不想考慮讓ViewController直接相互交談。
您想要的是第三個實體,該實體壽命很長,並且兩個ViewController都可以與之對話。 現在將其稱為TextManager。
因此,OpenViewController調用TextManager來設置其他UIViewController可能需要的文本。 然后,您的第二個UIViewController也可以與TextManager進行對話以檢索文本。 同樣,它可以將更改發送到第一個viewController可以讀取的TextManager。
UIViewControllers壽命不長-它們來來去去。 因此,您需要第三件事來處理您的長期數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.