我有一个具有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
}
答案 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!
}
}