Это происходит потому, что подготовка к segue будет вызываться каждый раз, когда вы выполняете какое-либо действие 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!
}
}
}
Попробуйте и поделитесь своими результатами.