执行 segue 后,文本字段永久位于标签中
Posted
技术标签:
【中文标题】执行 segue 后,文本字段永久位于标签中【英文标题】:Text field is permanently in label after performing segue 【发布时间】:2018-11-20 10:12:55 【问题描述】:我有一个具有 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
【问题讨论】:
【参考方案1】:你错了
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!
【讨论】:
当我尝试这样做时,当我单击 buttonTwo 时出现错误:以 NSException 类型的未捕获异常终止。我已经确定我正在使用所有的按钮和标签,并且它们都在代码中被引用,但它似乎不起作用。 buttonOne 工作正常。感谢您的帮助! @EdwardGallagher,使用上述代码不会出现异常。如果您以前的代码有效,那么此代码应该有效。确保您的按钮插座和操作成功绑定。 好吧,我要从头开始,以确保它有效!非常感谢! 刚刚重新开始,它的工作原理!非常感谢! @EdwardGallagher,太好了。【参考方案2】:这是因为您只设置了 textField1 的文本。您可能想要的是在第二个 ViewController 中设置 myString 取决于用户按下了哪个按钮。
在情节提要中,将第一个按钮的 tag 设置为 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)
【讨论】:
感谢您的帮助!我最终使用了 Kuldeeps 代码,但感谢您投入的时间!以上是关于执行 segue 后,文本字段永久位于标签中的主要内容,如果未能解决你的问题,请参考以下文章