【发布时间】:2015-09-04 00:09:45
【问题描述】:
我在注册屏幕上有 4 个文本字段,我已对其进行了设置,以便当用户在每个文本字段上按下下一个时,下一个文本字段将成为焦点。代码如下:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if (textField == self.fNameField) {
textField.resignFirstResponder()
self.sNameField.becomeFirstResponder()
}
else if (textField == self.sNameField) {
self.emailField.becomeFirstResponder()
} else if (textField == self.emailField) {
self.passwordField.becomeFirstResponder()
}
else {
var thereWereErrors = checkForErrors()
if !thereWereErrors
{
//conditionally segue to next screen
}
}
return true
}
在最终文本字段返回时,我正在调用检查错误函数(如下)。其中,如果任何字段有问题,我想关注该文本字段,以便用户可以轻松更正它。发生的情况是有错误的文本字段聚焦(如 checkForErrors 函数指示)一秒钟,但随后焦点切换回密码文本字段。我还尝试将self.passwordField.resignFirstResponder() 添加到上述函数的最后一个 else 中,这会使密码字段失去焦点,但是遇到问题的文本字段根本没有获得焦点(甚至没有像以前那样一秒钟)怎么能我解决这个问题?
func checkForErrors() -> Bool
{
var errors = false
let title = "Error"
var message = ""
if fNameField.text.isEmpty {
errors = true
message += "First name empty"
alertWithTitle(title, message: message, ViewController: self)
self.fNameField.becomeFirstResponder()
}
else if sNameField.text.isEmpty
{
errors = true
message += "Surname empty"
alertWithTitle(title, message: message, ViewController: self)
self.sNameField.becomeFirstResponder()
}
else if emailField.text.isEmpty
{
errors = true
message += "Email empty"
alertWithTitle(title, message: message, ViewController: self)
self.emailField.becomeFirstResponder()
}
else if !isValidEmail(emailField.text)
{
errors = true
message += "Invalid Email Address"
alertWithTitle(title, message: message, ViewController: self)
self.emailField.becomeFirstResponder()
}
else if passwordField.text.isEmpty
{
errors = true
message += "Password empty"
alertWithTitle(title, message: message, ViewController: self)
self.passwordField.becomeFirstResponder()
}
else if count(passwordField.text.utf16)<8
{
errors = true
message += "Password must be at least 8 characters"
alertWithTitle(title, message: message, ViewController: self)
self.passwordField.becomeFirstResponder()
}
return errors
}
注意我已经包含了 textField 委托。
根据要求提供标题功能的警报:
func alertWithTitle(title: String!, #message: String, #ViewController: UIViewController) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .Alert)
let action = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
alert.addAction(action)
ViewController.presentViewController(alert, animated: true, completion: nil)
}
【问题讨论】:
-
你在 textFieldDidBeginEditing 中写了什么?发布该代码
-
@iAnurag 我在这个控制器上没有 textFieldDidBeginEditing
-
你如何管理你的文本字段代表?
-
@iAnurag 我还没有开始添加该功能。我对 swift 很陌生。有什么我应该在那里做的事情导致上述问题吗?
-
alertWithTitle()是做什么的?