首页 > 解决方案 > 执行 segue 后,文本字段永久位于标签中

问题描述

我有一个具有 2 个按钮和 2 个文本字段的视图控制器,以及具有 1 个标签的第二个视图控制器。目前,如果我按下 buttonOne,第二个视图控制器中的标签将更改为“文本字段 1”,当我按下 buttonTwo 时,相同的标签再次显示“文本字段 1”。理想情况下,我希望标签在按下 buttonOne 时显示“文本字段”,在按下 buttonTwo 时显示“文本字段 1”。下面是使用的 2 个视图控制器以及我正在使用的情节提要和模拟器的屏幕截图。我认为问题是,secondController.myString = textField.text!但我不知道如何解决它。任何帮助表示赞赏。

故事板

故事板

模拟器

模拟器

第一个视图控制器:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var textField1: UITextField!

    var isButtonClicked: Bool = false

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        isButtonClicked = false
    }

    @IBAction func buttonOne(_ sender: Any) {
        if textField.text != "" {
            isButtonClicked = true
            performSegue(withIdentifier: "segue", sender: self)
        }

    }

    @IBAction func buttonTwo(_ sender: Any) {

        if textField1.text != ""{
            isButtonClicked = true
            performSegue(withIdentifier: "segue", sender: self)
        }

    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        var secondController = segue.destination as! SecondViewController
        secondController.myString = textField.text!
        secondController.myString = textField1.text!
   }
}

第二个视图控制器:

import UIKit

class SecondViewController: UIViewController {

    @IBOutlet weak var label: UILabel!

    var myString = String()
}

override func viewDidLoad() {
    super.viewDidLoad()

    label.text = myString
}

标签: swift

解决方案


这是因为您只设置了 textField1 的文本。您可能想要的是在第二个 ViewController 中设置 myString 取决于用户按下了哪个按钮。

在情节提要中,将您的第一个按钮的标签设置为 1,将第二个按钮的标签设置为 2,然后准备使用此按钮

let button = sender as! UIButton
if button.tag == 1 {
    secondController.myString = textField.text!
} else {
    secondController.myString = textField1.text!
}

也不要忘记执行 segue 并将 sender 作为此 perform segue 方法的 sender 参数

performSegue(withIdentifier: "segue", sender: sender)

推荐阅读