如何将值发送到Swift中的父视图控制器

我正在为我的iOS应用程序在swift中编写设置视图控制器屏幕。 我正在使用导航控制器来运行主设置表视图,其中显示标题为“input法”的单元格。 当前方法列在单元格的右侧。 他们可以单击单元格以转到下一个视图控制器,在这里他们可以select他们想要的input法。

从这里,有两个部分。 首先是input法的select(触摸屏或操纵杆)。 第二部分是游戏杆是否是左撇子还是右撇子。 我不想让vc在select一个盒子的时候放松,因为他们也可以在另一个部分select一个。

我的问题:如何从父级控制器更新父控制器中的文本字段。

我有可选解决scheme的问题:

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

viewDidLoad()会导致滞后,用户在改变之前看到旧的方法。

当有人点击导航控制器左上angular的后退button时,我无法find如何运行search引擎,因为导航控制器控制着search引擎。

即使当你确定哪个类代表的时候,转换父视图控制器也不是一个好主意。 我会做一个协议:

在子控制器中添加一个协议,如:

 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 

我在这里find了一个解决scheme: 修改一个variables从另一个视图控制器swift http://www.raywenderlich.com/115300/swift-2-tutorial-part-3-tuples-protocols-delegates-and-table-views

而不是尝试直接访问视图控制器(如果视图控制器没有返回一个零,这将更容易),您可以使用委托方法来调整variables。 代表像一个魅力工作!