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
我目前正在开发一个使用 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