当我第二次启动应用程序时,标签消失

时间:2019-09-07 23:40:40

标签: swift segue viewcontroller

所以我有一个带三个Viewcontroller的main.storyboard。在第一个视图控制器中,有一个开始按钮,该按钮具有第二个视图控制器的perform.segue方法。在第二个视图控制器中,有一个文本字段,要求输入用户名。用户输入其姓名并单击继续按钮时,textfield.text(人名)将通过prepare(for segue)方法放入第三个视图控制器的标签中。当我为第一个ime启动我的应用程序时,就会发生此过程。当我第二次启动我的应用程序时,显示的thirsViewcontroller没有第一个和第二个viewcontroller的“欢迎过程”,但是标签消失了。

secondViewController的代码


@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 ?"

    }

thirdViewcontroller的代码


@IBOutlet weak var helloNameLabel: UILabel!
var myString = String()

AppDelegate.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
    }


1 个答案:

答案 0 :(得分:1)

在secondViewController中,您需要保留用户名。您可以通过多种方式保留用户名,但是对于您的用例,您可以将用户名保存为用户默认值,如下所示:

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let name = enterYourNameTextfield.text ?? ""
        UserDefaults.standard.set(name, forKey: "name")
    }

在您的ThirdViewController的viewDidLoad方法中,您可以如下所示检索用户名

override func viewDidLoad(){
   let name = UserDefaults.standard.string(forKey: "name") ?? ""
   myString = "Hello \(name)! How are you today ?"
}
相关问题