我有一个函数通过检查返回的bool来确定是否应该提交表单。
功能:
func signUpViewController(signUpController: PFSignUpViewController!, shouldBeginSignUp info: [NSObject : AnyObject]!) -> Bool {
var informationComplete = true
// loop through all of the submitted data
for (key, value) in info {
let fieldValue: AnyObject? = value
if (!fieldValue || fieldValue?.length == 0) { // check completion
informationComplete = false;
break;
}
}
// is this possible
textFieldDidEndEditing(textField: UITextField?) {
}
// Display an alert if a field wasn't completed
if (!informationComplete) {
var alert = UIAlertController(title: "Error", message: "Make sure you fill out all of the fields!", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}
PFUser.logOut()
return informationComplete;
}
当前我检查空字段,但需要检查其他内容,例如文本字段中的文本数量,是否已正确输入电子邮件地址。
我想使用textFieldDidEndEditing在文本字段离开后检查它的内容。我将基本上使用if语句进行检查,然后显示错误消息,但也将informtionComplete设置为false,以便表单未提交任何错误。我也可能会禁用提交按钮。
在上述功能的一边,我做了类似的事情:
override func textFieldDidEndEditing(textField: UITextField!) {
if textField == self.signUpView.usernameField {
var length = countElements(self.signUpView.usernameField.text!)
if length < 2 {
var alert = UIAlertController(title: "Error", message: "Your company can only have a minimum of 2 characters!", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
self.signUpView.signUpButton.enabled = false
} else {
self.signUpView.signUpButton.enabled = true
}
}
if textField == self.signUpView.passwordField {
}
if textField == self.signUpView.emailField {
}
}
可以在函数内完成类似的操作,还是需要像在objective-c中那样设置实例变量,并在signUpViewController函数外部设置informationComplete var?
答案 0 :(得分:0)
你总是需要在正确的对象上调用函数,在这种情况下是委托本身。因此,如果代表不是自我,您必须将其称为
theDelegate.textFieldDidEndEditing(self.signUpView.usernameField)
请注意,您还必须指定它是哪个文本字段。
但这里真正的问题是结构性问题。你很困惑在哪里检查什么。 textFieldShouldEndEditing()
和textFieldDidEndEditing()
函数是验证特定字段上数据条目的正确位置。如果您需要验证项目组合,则需要在保存时进行验证。但是当你检查保存时,没有必要调用textField委托方法,因为那些方法已经运行了。
如果您需要知道在字段中输入数据时发生了什么,那么您使用在委托方法中设置的对象变量,您可以从save方法中检查。您永远不必再直接调用委托方法。
答案 1 :(得分:0)
这对我有用:
// loop through all of the submitted data
for (key, value) in info {
let fieldValue: AnyObject? = value
if (!fieldValue || fieldValue?.length == 0) { // check completion
informationComplete = false;
break;
} else if (countElements(self.signUpView.usernameField.text!) < 2) {
NSLog("signup field text less than 2")
// display alert
informationComplete = false
} else if (self.signUpView.passwordField) {
NSLog("password error ")
// display alert
informationComplete = false
}
}
我在signUpViewController方法中验证。我删除了显示警告的if语句并修改了我的for循环