如何使用 UIButton 停止特定功能?

Posted

技术标签:

【中文标题】如何使用 UIButton 停止特定功能?【英文标题】:How do I stop a specific function by using a UIButton? 【发布时间】:2015-09-07 23:15:55 【问题描述】:

我有用户注册视图和一个关闭视图的关闭按钮。对于用户名文本字段,我使用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
    

无论视图是否被关闭,警报仍然显示,如果视图不再存在,我如何让它停止?

【问题讨论】:

用相关代码更新您的问题。 【参考方案1】:

在您的应用委托中

添加变量

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

我不知道取消方法是否以正确的方式调用。如果它被正确调用并且没有取消块,那么可能不是我们取消查询的方式。我对 PFQuery 不太熟悉。

【讨论】:

好吧,关闭按钮从来没有以编程方式关闭视图,它只是在被选中时被塞回另一个视图 我还从query.cancel() 行收到一个错误,指出:atal 错误:在展开可选值时意外发现 nil 那你必须使用方法prepareForSegue() 我不能离开情节提要segue,然后将方法添加到按钮吗? 可以保留segue,不需要使用方法。检查上面的答案,让我知道它是否有效。

以上是关于如何使用 UIButton 停止特定功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何停止多个 UIButton 按下?

设置UIButton的标题时如何停止按钮动画[重复]

我无法弄清楚具有三种状态(启动、停止和重置)的 UIButton

如何将 UIButton 的高亮属性设置为 NO?

如何删除多个 UIButton 或动态创建的特定 UIButton?

如何使用自定义 UIButton 获得 UISegementedControl 功能?