在视图控制器之间传递数据而不更改视图

时间:2017-10-17 12:24:51

标签: ios swift uiviewcontroller

我想在两个视图控制器之间传递数据,但不希望在用户按下我的保存数据按钮时更改视图。

用户需要填写多个数据字段,完成后可以按另一个按钮转到第二个视图控制器。

我发现很多教程如何使用segue传递数据,但是只要按下“保存按钮”,它们就会全部改变视图。

任何人都可以向我解释如何更改代码?

@Phillip Mills:这是我使用你的代码的方式。 (我做错了什么?)

代码: ////////在FirstViewController上声明类(首先只在一个ViewController上尝试)

class FakeVC1 {
    func userInput() {
        DataModel.shared.username = outbj14u.text
}

class FakeVC2 {
    func viewAppears() {
        if let name = DataModel.shared.username {
            outbj14p.text = name
            print("I have nothing to say")
        }
    }
}

class DataModel {
    static let shared = DataModel()
    var username: String?
}



////till here

////这里是我调用函数的地方

override func viewDidAppear(_ animated: Bool) {

    FakeVC1().userInput()
    FakeVC2().viewAppears()

    if let xbj14p = UserDefaults.standard.object(forKey: "outbj14p") as? String
    {
        outbj14p.text = xbj14p
    }






    if let xbj14u = UserDefaults.standard.object(forKey: "outbj14u") as? String
    {
        outbj14u.text = xbj14u
    }

////

@Phillip Mills:以下是我所知道的。我想我在FirstViewController上得到了代码,但是Second View控制器上的代码必定是错误的。我没有得到任何错误,但在FirstViewController中输入后,SecondViewController上的文本字段保持不变

//// FirstViewController上的代码

class DataModel {
    static let shared = DataModel()
    var username: String?
}


@IBAction func savebj14p(_ sender: Any) {
    outbj14p.text = inbj14p.text
    DataModel.shared.username = outbj14p.text
    UserDefaults.standard.set(inbj14p.text, forKey: "namebj14p")
}

//和SecondViewController

@IBOutlet weak var bj14u: UILabel! // connected to a label

//和

class DataModel {
    static let shared = DataModel()
    var username: String?
}


override func viewDidAppear(_ animated: Bool) {


    if let name = DataModel.shared.username {
        bj14u.text = name
    }

}

3 个答案:

答案 0 :(得分:1)

在您的情况下,请勿传递数据。

创建共享对象以充当您的数据模型。当用户填写字段时,请更新数据模型。

当用户移动到第二个控制器/视图时,该控制器使用数据模型对象来显示它所需的内容。

class FakeVC1 {
    func userInput() {
        DataModel.shared.username = "Me"
    }
}

class FakeVC2 {
    func viewAppears() {
        if let name = DataModel.shared.username {
            print(name)
        } else {
            print("I have nothing to say")
        }
    }
}

class DataModel {
    static let shared = DataModel()
    var username: String?
}

FakeVC1().userInput()
FakeVC2().viewAppears()

答案 1 :(得分:0)

如果您需要在不更改视图的情况下将值传递给另一个viewcontroller,则可以使用NSNotificationCenter类

有关详细信息,请参阅此链接

NSNotificationCenter addObserver in Swift

答案 2 :(得分:0)

我建议使用全局变量或数组,您将在所有视图控制器中获得信息,并且您将能够在新的视图控制器中调用它。