【问题标题】:Text field is permanently in the second view controller upon segue文本字段在 segue 后永久位于第二个视图控制器中
【发布时间】:2018-11-01 10:08:40
【问题描述】:

我一直在开发一个应用程序,该应用程序允许在按下按钮时将多个文本字段从第一个视图控制器传递到第二个视图控制器。但是,当我只希望按下按钮时,文本字段永久位于第二个视图控制器中。这是第一个视图控制器的代码!非常感谢任何帮助。

class ViewController: UIViewController {

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

    @IBAction func buttonTwo(_ sender: Any) {
        if textField1.text != "" {
            performSegue(withIdentifier: "segue", sender: self)        
        }
    }

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

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

这是第二个视图控制器中的代码:

class SecondViewController: UIViewController {

    @IBOutlet weak var label: UILabel!

    @IBOutlet weak var label1: UILabel!

    var myString = String()
    var myString1 = String()

    override func viewDidLoad() {
        super.viewDidLoad()

        label.text = myString
        label1.text = myString1
        // Do any additional setup after loading the view.    
    }
}

Image of storyboard

【问题讨论】:

    标签: swift segue textfield


    【解决方案1】:

    发生这种情况是因为,每次执行某些 segue 操作时都会调用 prepare for segue。

    您应该设法拥有一个 bool 变量来帮助您跟踪是否单击了任何按钮,如果通过单击按钮执行了转场,那么只有您在准备转场时需要设置文本。

    这是你更新后的 viewController

    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)
    
        /*reset isButtonClicked to false, when you back from second viewController */
        isButtonClicked = false
    }
    
    @IBAction func buttonTwo(_ sender: Any) {
        if textField1.text != "" {
            isButtonClicked = true
            performSegue(withIdentifier: "segue", sender: self)
        }
    }
    
    @IBAction func buttonOne(_ sender: Any) {
        if textField.text != "" {
            isButtonClicked = true
            performSegue(withIdentifier: "segue", sender: self)
        }
    }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if isButtonClicked {
            var secondController = segue.destination as! SecondViewController
            secondController.myString1 = textField1.text!
            secondController.myString = textField.text!
        }
    }
    }
    

    尝试并分享您的结果。

    【讨论】:

    • 嗨 Bhavin,它似乎仍然不起作用。我只有一个按钮可以点击是一个问题吗?我正在制作一个只需要一个按钮的应用程序,但我不确定这是否会影响变量。感谢您的帮助
    • 您的问题不清楚。您提到,您有一个按钮,并且您为两个按钮操作编写了代码。请使用显示 UI 的故事板屏幕截图编辑您的问题,以帮助您更好地解决此问题。
    • 嗨 Bhavin,抱歉……我的评论令人困惑。我的意思是我有一个按钮用于一个 segue,另一个按钮用于另一个 segue。单击 buttonOne 会将 textField 输入到标签中。单击 buttonTwo 会将 textField1 输入到 label1 中。但目前,如果我单击任一按钮,它会同时将文本字段填充到标签中。我希望这能解决问题。我已将故事板添加到问题中。
    猜你喜欢
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    相关资源
    最近更新 更多