2015-10-01 2 views
0

Ниже приведен код для 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 и Тереза ​​нет ссылок на эту кнопку, кроме того. Может быть, есть способ сделать это, но я в недоумении.

Заранее благодарим за помощь.

+1

Я предполагаю, что вы хотите сделать это, потому что вы ждете асинхронной операции завершения. Пять секунд - это плохо, потому что это может быть больше или меньше фактического времени, необходимого для завершения операции. Поскольку у вас уже есть блок обратного вызова, почему бы не просто отключить кнопку, прежде чем вы вызовете 'saveInBackgroundWithBlock()', то переустановите ее внутри блока завершения, если вы решите не отклонять диспетчер представлений (который уничтожает кнопку). –

+0

@i_am_jorf Ну да, вроде. Я делаю это, потому что пользователь может нажать кнопку несколько раз, если соединение медленное и сделать несколько сообщений с одним и тем же контентом. –

ответ

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), вы можете сделать это, прежде чем уволить контроллер представления. Не знаю.

+0

Если вы преуспеете, контроллер вида (который содержит кнопку, я предполагаю), отклоняется. Так почему вы хотите его обновить? Я имею в виду, вы можете сделать это прямо перед 'if success {' если хотите. Предположим, я ничего не знаю о вашей структуре кода, кроме того, что вы опубликовали. Сегодня мои психические силы сегодня очень тонкие. :) –

+0

Hm. все падает, когда я пытаюсь это сделать. –

+0

Опубликовать стек и соответствующий код. –

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 
} 
4

Попробуйте это,

  1. в то время как нажать кнопку набор действий Disable.
  2. установка интервала для включения ваша кнопка используя функция задержки.

Ex:

let tapGesture = UITapGestureRecognizer(target: self, action: "tapaction") 
tapGesture.numberOfTapsRequired = 1 
Your_Button_name.addGestureRecognizer(tapGesture) 


@IBAction func tapaction() 
{ 
    Your_Button_name.disable=true 
    //Delay function to enable your button 
    NSTimer.scheduledTimerWithTimeInterval(Your_time_value_delay, target: self, selector: Selector("enablefunc"), userInfo: nil, repeats: false) 
} 

func enablefunc() 
{ 
    Your_Button_name.disable=false 
} 
+0

Спасибо! Его хорошая идея .. – Nadeshwaran

Смежные вопросы