簡體   English   中英

委托方法Swift無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM