我有用户注册视图和解除视图的解雇按钮。对于用户名文本字段,我使用textFieldShouldEndEditing
方法发出服务器请求以检查该用户名是否可用,如果不是,则发送警报。问题是,如果我插入已经使用的用户名并且我将该视图视为我不想再注册,则该警报仍会显示在另一个视图上。如何在忽略textFieldShouldEndEditing
函数的dismiss按钮中实现一些代码?
这是我的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
}
无论视图是否被解除,警报仍会显示,如果视图不再存在,如何让它停止?
答案 0 :(得分:1)
在您的app delegate
中添加变量
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不太熟悉。