我有用户注册视图和一个关闭该视图的关闭按钮。对于用户名文本字段,我使用了textFieldShouldEndEditing方法发出服务器请求,以检查该用户名是否可用,如果没有,则发送警报。问题是,如果我插入一个已经被使用的用户名,并且我好像不想再注册了一样就关闭了该视图,那么该警报仍会显示在另一个视图上。如何在取消textFieldShouldEndEditing功能的关闭按钮中实现一些代码?

这是我的textFieldShouldEndEditing代码:

func textFieldShouldEndEditing(textField: UITextField) -> Bool {

        var isTaken: Bool = false

        if textField == usernameTxt { var query = PFQuery(className: "_User")
        query.whereKey("username", equalTo: usernameTxt.text)
        query.findObjectsInBackgroundWithBlock {
            (objects: [AnyObject]?, error: NSError?) in
            if error == nil {
                if (objects!.count > 0){
                    isTaken = true
                    let myAlert = SCLAlertView().showError("Error", subTitle: "username \(textField.text) is already taken", closeButtonTitle: "OK")

                } else {
                    println("Username is available. ")
                }
            } else {
                println("error")
            }
          }
        }
        return true
    }


无论是否关闭视图,警报仍会显示,如果视图不再存在,我如何使其停止?

最佳答案

在您的应用程序委托中

添加一个变量

var signUpOn = false


接下来,在您的注册视图控制器中,添加这些方法以在您进入和退出时更改singUpOn变量。

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    (UIApplication.sharedApplication().delegate as! AppDelegate).signUpOn = true
}

override func viewWillDisappear(animated: Bool)
{
    super.viewWillDisappear(true)

    (UIApplication.sharedApplication().delegate as! AppDelegate).signUpOn = false
}


然后在查询的完成区域中检查标志并显示警报。

func textFieldShouldEndEditing(textField: UITextField) -> Bool {

    var isTaken: Bool = false

    if textField == usernameTxt {

        var query = PFQuery(className: "_User")
        query.whereKey("username", equalTo: usernameTxt.text)
        query.findObjectsInBackgroundWithBlock {
            (objects: [AnyObject]?, error: NSError?) in
            if error == nil {
                if (objects!.count > 0){
                    isTaken = true

                    if (UIApplication.sharedApplication().delegate as! AppDelegate).signUpOn
                    {
                        let myAlert = SCLAlertView().showError("Error", subTitle: "username \(textField.text) is already taken", closeButtonTitle: "OK")
                    }
                } else {
                    println("Username is available. ")
                }
            } else {
                println("error")
            }
        }
    }
    return true
}


我不知道是否以适当的方式调用了cancel方法。如果调用正确且未取消该块,则可能不是我们取消查询的方式。我对PFQuery不太熟悉。

07-28 02:37
查看更多