如何将数据从VC子视图发送到VC superview

时间:2015-11-10 12:28:08

标签: ios swift2

我有一个firstController和一个secondController。在firstController中单击一个单元格时,numpad(= secondController)将作为子视图加载。我想将小键盘的按钮连接到第一个集合,以便我能够立即在firstController上的标签中显示数字。数据交易应该是即时的。

我无法将按钮连接到第一个viewcontroller。 这是我第一次尝试使用它,所以我可能完全以错误的方式看待它。我使用了两个不同的viewControllers来维护我的故事板中的概述。

有关如何将数据从VC子视图转发到superview的任何建议吗?

When collection cell is clicked the pickerview appears

2 个答案:

答案 0 :(得分:3)

您可以使用委托将数据传回第一个控制器。

在小键盘视图中,当有人输入数字时,将触发创建委托。

protocol NumpadDelegate {
    func numpadWasPressed(value:Int)
}

和作为委托的numpadvc上的var

 var delegate: NumpadDelegate?

然后你的第一个vc需要实现委托并将自己设置为委托

 FirstVC: NumPadDelegate {

    func viewDidLoad() {
      self.numpadVC.delegate = self
    }
 }    

在有人按下数字时触发的方法调用您的委托方法

self.delegate.?numpadWasPressed(numpadValue)

然后firstviewcontroller将实现该委托,当它按下的小键盘时,你可以从该方法获取数据。

func numpadWasPressed(value:Int) {
   //get numpad value here

 }

像这样的东西

答案 1 :(得分:2)

由于您从第一个视图控制器运行第二个视图控制器(NumpadVC),因此您肯定会引用NumpadVC

合适的解决方案是声明一个协议(在任何类之外)

protocol NumPadDelegate {
  didTapButton(button: UIButton)
}

NumpadVC

中的代表
var delegate NumPadDelegate?

每按一次按钮,请致电

delegate?.didTapButton(button)

并将引用传递给当前按钮。

在第一个视图控制器中,将NumPadDelegate添加到类声明行,在转换到NumpadVC之前,将numpadVC的委托(假设是实例的名称)设置为{ {1}}。

self

然后实施

numpadVC.delegate = self

处理按钮点击。