簡體   English   中英

Swift:在dismissViewControllerAnimated 上將字符串值從VC2 傳遞到VC1

[英]Swift: pass string value from VC2 to VC1 on dismissViewControllerAnimated

在這里學習了很多有用的東西后第一次提問!

我有一個帶有按鈕和標簽的 VC1。 該按鈕被編碼為以編程方式呈現 VC2(在 IB 中沒有 segue)。 VC2 有一個包含字符串值的單元格的表格視圖。

當我單擊 VC2 中的單元格時,我試圖獲取所選單元格的字符串值並將其傳遞回 VC1 中的 label.text。

第一個 ViewController 代碼:

class VC1: UIViewController {
    ... ...

    @IBOutlet weak var LabelText: UILabel!
    var passedString = "Example"

    override func viewWillAppear(animated: Bool) {
        LabelText.text = "\(passedString)"
    }

    @IBAction func chooseLabelTextBtnPressed(sender: AnyObject) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("VC2") as! VC2
        self.presentViewController(vc, animated: true, completion: nil)
}

SecondViewController 代碼:

class VC2: UIViewController, UITableViewDelegate, UITableViewDataSource {    
    ... ...

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    // Get Cell Label
    let indexPath = tableView.indexPathForSelectedRow;
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as! VC2_tableViewCell!;
    let valueToPass = currentCell.IBOutletLbl.text
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let viewController = storyboard.instantiateViewControllerWithIdentifier("VC1") as! VC1
    viewController.passedString = valueToPass!

    //self.presentViewController(viewController, animated: true , completion: nil)

    self.dismissViewControllerAnimated(true, completion: nil)
}

我希望 VC1 中的 func viewWillAppear() 會在 VC2 關閉時更新標簽的 String 值,但事實並非如此。

我不能使用從 VC2 到 VC1 的 presentViewController,因為它可能會再次打開 VC1 而不是返回,然后 VC1 中的其他變量將無法訪問。

幫我! 謝謝!

您應該將委托從 VC1 傳遞到 VC2,然后只需調用更新的委托方法。

在此處發送對 VC2 的引用。

@IBAction func chooseLabelTextBtnPressed(sender: AnyObject) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("VC2") as! VC2
        vc.delegate = self
        self.presentViewController(vc, animated: true, completion: nil)
}

在 VC2 中調用self.dismissViewControllerAnimated(true, completion: nil) ,只需調用delegate.someMethod(someValue)

還要確保您的委托是弱引用。

當你這樣做時:

let viewController = storyboard.instantiateViewControllerWithIdentifier("VC1") as! VC1

它創建了一個新的VC1實例,實際上並不引用呈現VC2VC1

相反,您應該在VC1VC2之間添加委派以傳遞數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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