我想在两个视图控制器之间传递数据,但不希望在用户按下我的保存数据按钮时更改视图。
用户需要填写多个数据字段,完成后可以按另一个按钮转到第二个视图控制器。
我发现很多教程如何使用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
}
}
答案 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类
有关详细信息,请参阅此链接
答案 2 :(得分:0)
我建议使用全局变量或数组,您将在所有视图控制器中获得信息,并且您将能够在新的视图控制器中调用它。