我有一个带有三个Viewcontroller的主故事板。在第一个视图控制器中,有一个开始按钮,其中包含第二个视图控制器的 perform.segue 方法。在第二个视图控制器中,有一个文本字段询问用户的名称。
当用户输入他们的姓名并单击继续按钮时,textfield.text(人员的姓名(通过 prepare(for segue( 方法放入第三个视图控制器上的标签中。此过程在我第一次启动应用程序时发生。
当我第二次启动我的应用程序时,显示渴求的视图控制器没有第一个和第二个视图控制器的"欢迎过程",但标签消失了。
第二个视图控制器的代码
@IBAction func continueButton(_ sender: Any) {
animateButton()
if enterYourNameTextfield.text != "" {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.8, execute: {
self.performSegue(withIdentifier: "thirdScreenSegue", sender: self)
}
)}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let thirdController = segue.destination as! thirdViewController
thirdController.myString = "Hello (enterYourNameTextfield.text!)! How are you today ?"
}
第三视图控制器的代码
@IBOutlet weak var helloNameLabel: UILabel!
var myString = String()
应用程序委托.swift文件的代码
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let isFirst = UserDefaults.standard.bool(forKey: "isLaunched") // edited this after rmaddy's comment
var viewControllerWithIdentifier = "initialView"
if !isFirst {
UserDefaults.standard.set(true, forKey: "isLaunched")
viewControllerWithIdentifier = "firstView"
}
let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController : UIViewController = mainStoryboard.instantiateViewController(withIdentifier: viewControllerWithIdentifier) as UIViewController
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = initialViewController
self.window?.makeKeyAndVisible()
sleep(2)
return true
}
在secondViewController中,您需要保留用户的名称。您可以通过多种方式保留用户名,但对于您的用例,您可以将名称保存在用户默认值中,如下所示:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let name = enterYourNameTextfield.text ?? ""
UserDefaults.standard.set(name, forKey: "name")
}
在第三个视图控制器的 viewDidLoad 方法中,您可以检索用户名,如下所示
override func viewDidLoad(){
let name = UserDefaults.standard.string(forKey: "name") ?? ""
myString = "Hello (name)! How are you today ?"
}