iOS, Swift -如何禁用 UIButton?

iOS, Swift -How disable a UIButton?

我目前正在开发一个使用 Parse 作为后端系统的应用程序。我想实现 "Liking" 功能。这是我的代码

 @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

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

您应该以某种方式记住您禁用的按钮。

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

然后在 ViewWillAppear 中添加这些行:

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

显然,您的标志变量应添加为 class 变量。

希望对您有所帮助。

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

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()
 })

}

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

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

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

看来您不是在服务器上增加点赞数,而是在客户端上进行。这不能像您期望的那样工作的原因有很多。

您需要的是服务器上的一个数据库,用于跟踪哪个用户喜欢了什么。您不想只保存喜欢的次数,您想要保存喜欢该对象的用户列表。

Swift 3.0

btnEnviar.isEnabled = false

btnEnviar.isUserInteractionEnabled = false