【发布时间】:2016-08-20 09:41:10
【问题描述】:
我目前有一个应用程序,您可以在一个视图中键入一个内容,然后它会出现在另一个视图中。我应该只是通过将信息发送到数据库然后在另一个视图上检索它来执行此操作,还是有办法直接传递此信息?
【问题讨论】:
-
@EricAya 感谢您的提示!我会确保不会发生这种情况。
标签: ios swift view viewcontroller
我目前有一个应用程序,您可以在一个视图中键入一个内容,然后它会出现在另一个视图中。我应该只是通过将信息发送到数据库然后在另一个视图上检索它来执行此操作,还是有办法直接传递此信息?
【问题讨论】:
标签: ios swift view viewcontroller
如果您使用故事板,请查看 Segues
【讨论】:
从一个 ViewController 向另一个 ViewController 发送信息的最佳方式是 segue。
你可以这样使用它:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if(segue.identifier == "yourIdentifierInStoryboard") {
let yourNextViewController = (segue.destinationViewController as yourNextViewControllerClass)
yourNextViewController.value = yourValue
在你的 NextViewController 类中。
class yourNextViewControllerClass {
var value:Int! // or whatever
您也可以通过编程方式调用它:
self.performSegueWithIdentifier("yourIdentifierInStoryboard", sender: self)
将 DestinationViewController 中的值设置回主(第一个)ViewController
1.实现一个协议,例如创建一个名为protocol.swift的文件。
protocol changeUserValueDelegate {
func changeUser(toValue:Bool)
}
2.在您的第二个视图上设置代理
class yourNextViewControllerClass {
var delegate:changeUserValueDelegate?
3.设置代理加载(prepareForSegue)
if(segue.identifier == "yourIdentifierInStoryboard") {
var yourNextViewController = (segue.destinationViewController as yourNextViewControllerClass)
yourNextViewController.delegate = self
4.向FirstViewController添加Function
func changeUser(toValue:Bool) {
self.currentUserValue = toValue
}
5.从您的 SecondViewController 调用此函数
delegate?.changeUser(true)
6. 在您的 FirstViewController 中设置委托
class FirstViewController: UIViewController, ChangeUserValueDelegate {
【讨论】:
如果您以编程方式执行此操作,那么您可以在情节提要中为您的目标视图控制器提供一个标识符,当您移动到 Viewcontroller 时,使用此标识符获取此视图控制器并向第二个视图控制器添加一个属性以获取您拥有的文本写了
例子:
let storyBoard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let secondViewController = storyBoard.instantiateViewControllerWithIdentifier("secondViewControllerIdentifier") as! UserBasicInfoViewController
secondViewController.Text = self.textField.text
self.navigationController?.pushViewController(userProfile, animated: true)
或者
self.presentViewController(secondViewController, animated: true, completion: nil)
【讨论】: