簡體   English   中英

如何將值發送到Swift中的父視圖控制器

[英]How to send values to a parent view controller in Swift

我正在使用swift編寫的iOS應用程序的設置視圖控制器屏幕。 我正在使用導航控制器來運行主設置表視圖,該視圖顯示標題為“輸入方法”的單元格。 當前方法列在單元格的右側。 他們可以單擊單元格轉到下一個視圖控制器,在那里他們可以選擇他們喜歡的輸入法。

從這里開始,有兩個部分。 第一種是選擇的輸入法(觸摸屏或操縱桿)。 第二部分是關於該人是否是左撇子或右撇子的操縱桿。 當他們選擇一個盒子時,我不想讓vc放松,因為他們也可以在另一個盒子中選擇一個。

我的問題:如何從子控制器更新父控制器中的文本字段。

我對可選解決方案的問題:

let parentVC: UIViewController = (self.navigationController?.parentViewController)!
parentVC.inputMethod.text? = cellSelected // This doesn't work because it cannot find the label inputMethod.

viewDidLoad()將導致延遲,並且用戶在更改之前會看到舊方法。

當有人點擊導航控制器左上角的后退按鈕時,我無法找到如何運行segue,因為導航控制器控制了segue。

即使您確定哪個類表示,也不應該轉換父視圖控制器。 我會用協議做的:

在子控制器中添加如下協議:

protocol ChildNameDelegate {
    func dataChanged(str: String)
}

class ChildClass {

    weak var delegate: ChildNameDelegate?

    func whereTheChangesAreMade(data: String) {
        delegate?.dataChanged(data)
    }
}

而在父母:

class ParentClass: ChildNameDelegate {

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        guard let segueId = segue.identifier else { return }

        switch segueId {
        case "childSegue":
            let destVC = segue.destinationViewController as! ChildClass
            destVC.delegate = self
            break
        default:
            break
        }
    }

    // Child Delegate
    func dataChanged(str: String) {
        // Do whatever you need with the data
    }
}

您需要將parentViewController為它具有的任何自定義類。 例如,如果父類具有ExampleParentController類,則應編寫:

let parentVC = (self.navigationController?.parentViewController)! as! ExampleParentController
parentVC.inputMethod.text? = cellSelected

我在這里找到了一個解決方案: 從另一個視圖控制器swift修改一個變量 http://www.raywenderlich.com/115300/swift-2-tutorial-part-3-tuples-protocols-delegates-and-table-views

而不是試圖直接訪問視圖控制器(如果沒有為視圖控制器返回nil會更容易),您可以使用委托方法來調整變量。 代表工作就像一個魅力!

暫無
暫無

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

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