在iOS视图控制器之间发送数据
您是否要在视图控制器之间传递数据? 您已经知道如何连接动作和插座吗? 然后马上上来,因为这是您一直在寻找的简洁,直接的文章。 尽管有几种传递数据的方法,但以下是一个很好的起点。
转发数据
认识Viewcontrollers Fred和Barney。 要将信息从Fred传送到Barney,我们将从以下简单设置开始:
- 在情节提要中 ,创建一个从Fred到Barney的表演节目,其标识符为sendForward 。
- 在fred.swift中,使用以下代码为“发送”按钮创建一个动作:
@IBAction func sendButtonPressed(_ sender:UIButton){
performSegue(withIdentifier:“ sendForward”,发送者:self)
}
3.在其下,添加prepare(for:sender :)方法。 当您调用performSegue时,此方法会自动触发,并完全按照其说明执行—准备segue:
覆盖func prepare(用于segue:UIStoryboardSegue,发件人:任意?){
如果segue.identifier ==“ sendForward” {// A
如果让destinationVC = segue.destination为? 巴尼{// B
destinationVC.data = textField1.text // C
}
}
}
答:您可能有几个问题,因此请首先检查您使用的是正确的问题。
B)为了将信息传递给Barney,我们需要引用他的视图控制器。
C)现在我们已经引用了Barney,可以使用它来引用他的属性。 在这里,我们使用他的data属性,接下来将创建它。
4.在Barney.swift中添加以下属性:
var资料:字串?
5.最后:
如果dataReceived = data {
dataLabel.text = dataReceived
}
就是这样! 在Fred中输入内容,然后按保存并保存! 它出现在巴尼。
向后发送数据
像我们上面所做的那样,通常使用segue来转发数据。 但是,向后发送数据则是另一回事。 也许有一天您会想在其他地方重用Barney。 那意味着他对弗雷德一无所知。 解决方案? 一个协议! 通过向Barney添加文本字段和标签来更新设置。 别忘了给弗雷德贴上标签。
- 在barney.swift中,在类声明上方添加一个协议。 该协议包含一个称为transferDataWithProtocol的函数:
协议SendingDataProtocol {
func transferDataWithProtocol(data:String)
}
BarneyViewController类:UIViewController {
2.创建类型为SendingDataProtocol的委托属性。 现在其他班级可以选择成为Barney的代表。
var委托:SendingDataProtocol?
3.在“发送”按钮操作中,根据协议定义功能
@IBAction func savePressed(_ sender:UIButton){
如果让dataText = dataTextField.text {
委托?.transferDataWithProtocol(数据:dataText)
关闭(动画:true,完成:nil)
}
}
4.回到fred.swift并采用您新创建的协议:
类FredViewController:UIViewController, SendingDataProtocol {
5.弗雷德必须声明他是巴尼的代表。 我们可以在前面编写的prepare(for:sender :)方法中添加一行:
覆盖func prepare(用于segue:UIStoryboardSegue,发件人:任意?){
如果segue.identifier ==“ sendForward” {
如果让destinationVC = segue.destination为? 巴尼{
destinationVC.data = textField1.text
destinationVC.delegate =自我
}
}
}
6.最后,从协议添加功能:
func transferDataWithProtocol(data:String){
dataLabel.text =数据
}
输入一些文本,然后按Barney中的send键,然后,您将一个字符串传递回Fred! 同样,有很多方法可以在视图控制器之间完成数据发送,但是上述方法经常使用。