执行完搜索后,文本字段永久位于标签中

时间:2018-11-20 10:12:55

标签: swift

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

故事板

Storyboard

模拟器

Simulator

第一视图控制器:

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
}

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

答案 1 :(得分:0)

您在这里犯了错误

secondController.myString = textField.text!
secondController.myString = textField1.text!

每次仅textField1.text传递给myString,以便它显示您的textField1值。

做下面的事情

var isFirstButtonClicked: Bool = false   

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

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

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

    if isFirstButtonClicked {
        secondController.myString = textField.text!
    }
    else {
        secondController.myString = textField1.text!
    }
}