iOS,Swift - 如何禁用UIButton?

时间:2015-03-29 09:56:24

标签: ios swift uibutton

我目前正在使用Parse作为后端系统的应用程序。我想实现一个"喜欢"特征。这是我的代码

 @IBAction func ButtonPressed(sender: AnyObject) {

    var query = PFQuery(className: "Content")

    query.getObjectInBackgroundWithId(object.objectId, block: { (obj:PFObject!, error:NSError!) -> Void in


        if error != nil{
            println("Update error \(error.localizedDescription)")
        }else{

            var likesNumber = obj.objectForKey("Likes")[0] as Int
            obj["Likes"] = [likesNumber + 1]

            self.likeslab.setTitle("\(likesNumber + 1) likes", forState: UIControlState.Normal)
            self.likesButton.enabled = false

            obj.save()


            }


    })


}

不幸的是,代码效果很好,我遇到了一个问题:用户触摸按钮后我想禁用它(为了避免来自同一用户的多次喜欢)。我尝试在以下行中执行此操作:

 self.likesButton.enabled = false

它正在工作但是如果用户离开视图然后返回,则再次启用该按钮。 非常感谢你的帮助!

3 个答案:

答案 0 :(得分:2)

这是必须在服务器端提供的东西。服务器必须向您提供用户是否喜欢的信息。然后,您可以在控制器上的enabled方法中设置viewWillAppear:

你的代码中有些东西闻起来很糟糕,例如:

var likesNumber = obj.objectForKey("Likes")[0] as Int
obj["Likes"] = [likesNumber + 1]

似乎不是在服务器上增加喜欢的数量,而是在客户端上进行。有很多原因导致这种情况不起作用,就像你期望的那样。

您需要的是服务器上的数据库,它将跟踪哪个用户喜欢什么。您不想只保存喜欢的数量,而是希望保存喜欢该对象的用户列表。

答案 1 :(得分:0)

您必须以某种方式记住您的按钮已被禁用。

一个示例是在ViewController中添加一个标志,该标志在您禁用或启用UIButton时会更新。因此,当您使用self.likesButton.enabled = false更新按钮时,您将标记值更改为false。

然后在ViewWillAppear中添加以下行:

if flag { self.likesButton.enabled = true } else { self.likesButton.enabled = false }

显然你的flag变量应该作为类变量添加。

希望这会对你有所帮助。

以下是我为初学者添加的代码:

var isButtonEnabled:Bool = true


override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

           self.isButtonEnabled = NSUserDefaults.standardUserDefaults().valueForKey("isButtonEnabled")

    if(isButtonEnabled){

       self.likesButton.enabled = true
    }
    else{
       self.likesButton.enabled = false
    }

}

@IBAction func ButtonPressed(sender: AnyObject) {

var query = PFQuery(className: "Content")

query.getObjectInBackgroundWithId(object.objectId, block: { (obj:PFObject!, error:NSError!) -> Void in


    if error != nil{
        println("Update error \(error.localizedDescription)")
    }else{

        var likesNumber = obj.objectForKey("Likes")[0] as Int
        obj["Likes"] = [likesNumber + 1]

        self.likeslab.setTitle("\(likesNumber + 1) likes", forState: UIControlState.Normal)
        self.likesButton.enabled = false

        obj.save()


        }

   self.likesButton.enabled = false
    NSUserDefaults.standardUserDefaults().setObject(false, forKey: "isButtonEnabled")
    NSUserDefaults.standardUserDefaults().synchronize()
 })

}

答案 2 :(得分:0)

Swift 3.0

btnEnviar.isEnabled = false

btnEnviar.isUserInteractionEnabled = false