iOS从不同的视图控制器快速传递信息
Posted
技术标签:
【中文标题】iOS从不同的视图控制器快速传递信息【英文标题】:iOS passing information from different viewcontrollers swift 【发布时间】:2016-08-20 09:41:10 【问题描述】:我目前有一个应用程序,您可以在一个视图中键入一个内容,然后它会出现在另一个视图中。我应该只是通过将信息发送到数据库然后在另一个视图上检索它来执行此操作,还是有办法直接传递此信息?
【问题讨论】:
@EricAya 感谢您的提示!我会确保不会发生这种情况。 【参考方案1】:如果您使用故事板,请查看 Segues
【讨论】:
我目前正在以编程方式进行所有操作。还有其他方法吗?【参考方案2】:从一个 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
【讨论】:
感谢您的详细回答。是否有指向您可以在此处发布的教程的链接? 这是我对另一个问题的回答。但是有很多教程:raywenderlich.com/113394/storyboards-tutorial-in-ios-9-part-2【参考方案3】:如果您以编程方式执行此操作,那么您可以在情节提要中为您的目标视图控制器提供一个标识符,当您移动到 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)
【讨论】:
以上是关于iOS从不同的视图控制器快速传递信息的主要内容,如果未能解决你的问题,请参考以下文章