点击后如何禁用按钮几秒钟

时间:2015-10-01 17:39:28

标签: ios swift button ibaction

以下是IBAction的代码,我想在点击后停用5秒钟。

@IBAction func postPressed(sender: AnyObject) {
        //var disableMyButton = sender as? UIButton
        //disableMyButton!.enabled = false
        //NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector:"enableButton", userInfo: nil, repeats: false)
    if(currLocation != nil){
        let testObject = PFObject(className: "Hey")
        testObject["text"] = self.postView.text
        testObject["count"] = 0
        testObject["replies"] = 0            
        testObject["location"] = PFGeoPoint(latitude: currLocation!.latitude , longitude: currLocation!.longitude)
        testObject["comments"] = []
        testObject["user"] = PFUser.currentUser()
        testObject.saveInBackgroundWithBlock({ (success, error) -> Void in
            if success {
                self.dismissViewControllerAnimated(true , completion: nil)
                if let completion = self.completion {
                    completion(self)
                }
            }
        })
    } else {
        alert()
    }  
}

注释掉的代码是我尝试禁用按钮5秒钟,但是这段代码崩溃了,我相信它崩溃了,因为没有对启用按钮的引用。

通常我会做类似

的事情
func enableButton() {
   self.button.enabled = true
}

但是这不起作用,因为它是一个IBAction,除此之外没有对按钮的引用。也许有办法这样做,但我不知所措。

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

试试这个,

  1. 同时点击动作设置按钮禁用。
  2. 设置一些间隔以启用 你的按钮使用延迟功能。
  3. 例如:

    EditText

答案 1 :(得分:1)

   var disableMyButton = sender as? UIButton
   disableMyButton!.enabled = false
   testObject.saveInBackgroundWithBlock({ (success, error) -> Void in
        if success {
            self.dismissViewControllerAnimated(true , completion: nil)
            if let completion = self.completion {
                completion(self)
            }
        } else {
            disableMyButton!.enabled = true
        }
    }

此外,根据completion(self)的作用,您可能希望在关闭视图控制器之前执行此操作。我不知道。

答案 2 :(得分:1)

您可以使用调度框架添加延迟。使用主线程。

disableMyButton!.enabled = false
let delay = dispatch_time(DISPATCH_TIME_NOW, Int64(5 * Double(NSEC_PER_SEC)))

dispatch_after(delay, dispatch_get_main_queue()) {
    disableMyButton!.enabled = true
}

答案 3 :(得分:0)

SWIFT 5.2

在 UIButton Action 中放置以下代码:

yourButtonOutlet.isEnabled = false
                //Delay function to enable your button for 3 seconds
            Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(self.enablefunc), userInfo: nil, repeats: false)

然后在 UIButton func 之外放置:

@objc func enablefunc()
{
    yourButtonOutlet.isEnabled = true
}