将 segued 数据存储在单独的视图控制器上(swift 4)

Posted

技术标签:

【中文标题】将 segued 数据存储在单独的视图控制器上(swift 4)【英文标题】:store segued data on a separate viewcontroller (swift4) 【发布时间】:2017-10-25 15:45:44 【问题描述】:

我的代码从文本字段中获取文本,然后转到单独的视图控制器。问题是它只能存储 1 个 segue 条目。每次按下按钮时,新的都会替换旧的。如何在 vc2 上将每个新条目存储到 segue。

VC

import UIKit

class ViewController: UIViewController 

    @IBOutlet var txt: UITextField!
    override func viewDidLoad() 
        super.viewDidLoad()

    
    @IBAction func pressButton(_ sender: Any) 
        if txt.text != "" 
performSegue(withIdentifier: "segue", sender: self)

        
        
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        let secondController = segue.destination as! twoViewController
        secondController.myString = txt.text!

    
    

两个VC

import UIKit

class twoViewController: UIViewController 

    @IBOutlet var labelSmtih: UILabel!
    var myString = String()

    override func viewDidLoad() 
        super.viewDidLoad()
        labelSmtih.text = myString
    




【问题讨论】:

【参考方案1】:

例如,如果第二个视图控制器是 UISplitViewController,您应该能够将按钮的文本附加到标签,方法是:

@IBAction func pressButton(_ sender: Any) 
        if txt.text != "" 
performSegue(withIdentifier: "segue", sender: self)

        
        
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        let secondController = segue.destination as! twoViewController
        secondController.myString += txt.text!

    
    

如果你真的有一个单独的视图控制器,一旦你回到第一个 VC,它可能会丢失数据。在这种情况下,我建议您将标签的当前文本保存在第二个 VC 的 viewWillDisappear 上,然后在第一个 VC 上的 prepareforsegue 函数中检索它。更多信息在这里:Swift: How to store user preferences?

【讨论】:

以上是关于将 segued 数据存储在单独的视图控制器上(swift 4)的主要内容,如果未能解决你的问题,请参考以下文章

反转Segue时如何将信息传回iOS?

我可以通过 Segues 在视觉上完全“绕过”视图控制器吗?

使用 IBAction 将数据传递到另一个视图控制器而无需 segue swift

如何在 Xcode 中展开 segue

尝试使用 segue 将数据从一个视图控制器传递到另一个视图控制器

将数据从一个视图控制器传递到下一个视图控制器,而无需在 swift 中进行 segue