是否可以在swift函数中使用UITextFieldDelegate方法?

时间:2014-09-03 12:37:35

标签: ios swift parse-platform uitextfield uitextfielddelegate

我有一个函数通过检查返回的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?

2 个答案:

答案 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循环