我正在通过制作一个时间表应用程序来学习Swift,该应用程序只是创建随机时间表并要求用户在UITextField中键入答案。
我希望用户能够点击返回键,并让文本字段清除其先前的答案,并使键盘保持在可见状态。我已经设置了我想要的其他行为,只是我似乎找不到任何类似的问题来弄清楚如何清除,并在点击返回键时执行所有这些操作。
这是我到目前为止的代码,在关闭键盘时可以使用,并且不会清除该字段。
非常感谢!
@IBAction func answerTyped(_ sender: UITextField) {
/* Clear the text field*/
questionNumber += 1
attempted += 1
markQuestion(answer: answer)
newQuestion(awardLevel: currentLevel, questionNumber: questionNumber)
}
答案 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
}
}