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