在iOS视图控制器之间发送数据

您是否要在视图控制器之间传递数据? 您已经知道如何连接动作和插座吗? 然后马上上来,因为这是您一直在寻找的简洁,直接的文章。 尽管有几种传递数据的方法,但以下是一个很好的起点。

转发数据

认识Viewcontrollers Fred和Barney。 要将信息从Fred传送到Barney,我们将从以下简单设置开始:

  1. 在情节提要中 ,创建一个从Fred到Barney的表演节目,其标识符为sendForward
  2. 在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添加文本字段和标签来更新设置。 别忘了给弗雷德贴上标签。

  1. 在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! 同样,有很多方法可以在视图控制器之间完成数据发送,但是上述方法经常使用。