每次按下返回键时,使UITextField清除内容

时间:2018-08-15 16:45:49

标签: ios swift uikit

我正在通过制作一个时间表应用程序来学习Swift,该应用程序只是创建随机时间表并要求用户在UITextField中键入答案。

我希望用户能够点击返回键,并让文本字段清除其先前的答案,并使键盘保持在可见状态。我已经设置了我想要的其他行为,只是我似乎找不到任何类似的问题来弄清楚如何清除,并在点击返回键时执行所有这些操作。

这是我到目前为止的代码,在关闭键盘时可以使用,并且不会清除该字段。

非常感谢!

@IBAction func answerTyped(_ sender: UITextField) {

    /* Clear the text field*/

    questionNumber += 1
    attempted += 1
    markQuestion(answer: answer)
    newQuestion(awardLevel: currentLevel, questionNumber: questionNumber)
}

2 个答案:

答案 0 :(得分:0)

您将需要做一些事情,可能是将包含此文本字段的视图控制器包含到uitextfieldelegate中,然后添加必要的委托函数。

我认为您想要的功能是TextField:DidEndEditing:Reason https://developer.apple.com/documentation/uikit/uitextfielddelegate/2352220-textfielddidendediting

或者您也可以使用

func textFieldShouldReturn(_ textField: UITextField) -> Bool {   //delegate method
   textField.resignFirstResponder()
   return true
}

,每次用户按下返回键时都会调用。您需要添加逻辑以在返回之前清除内容。

答案 1 :(得分:0)

如果您希望在点击返回按钮时清除textField,则可以使用textFieldShouldReturn委托。

func textFieldShouldReturn(_ textField: UITextField) -> Bool {   //delegate method
   textField.text = "" // Clears text
   //Do other things that you want to do when user taps return button
   return true
}

请注意,这不会像您要求的那样关闭textField,通常用户习惯于使用 return 来关闭其textField。因此,如果您问我,这是不好的用户体验。而且,您需要一种机制,让用户可以在需要时关闭键盘,例如轻按外部以关闭键盘或其他方法。所以我希望你能解决这个问题。

您的viewController应该已经实现了UITextFieldDelegate才能完成此方法。

class YourViewController: UITextFieldDelegate {
    var textField: UITextField! //Using IBOutlet or whatever

    func viewDidLoad() {
        super.viewDidLoad()

        textField.delegate = self
    }
}