我有一个firstController和一个secondController。在firstController中单击一个单元格时,numpad(= secondController)将作为子视图加载。我想将小键盘的按钮连接到第一个集合,以便我能够立即在firstController上的标签中显示数字。数据交易应该是即时的。
我无法将按钮连接到第一个viewcontroller。 这是我第一次尝试使用它,所以我可能完全以错误的方式看待它。我使用了两个不同的viewControllers来维护我的故事板中的概述。
有关如何将数据从VC子视图转发到superview的任何建议吗?
答案 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
处理按钮点击。