我目前正在使用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
它正在工作但是如果用户离开视图然后返回,则再次启用该按钮。 非常感谢你的帮助!
答案 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