2015-04-26 6 views
1

Я хочу сделать UIAlertAction unclickable. В основном у меня есть UIAlertView, который появляется, когда я пытаюсь что-то загрузить. Когда эта загрузка закончится, я хочу, чтобы UIAlertView's action не был доступен для клики. Когда он становится кликабельным, это означает, что загрузка завершена. Вот то, что я до сих пор:Сделать действие UIAlertViewController неприступным?

@IBOutlet var activityView: UIActivityIndicatorView! 

var alert = UIAlertController(title: nil, message: "Please wait...", preferredStyle: UIAlertControllerStyle.Alert) 

override func viewDidLoad(){ 
    self.activityView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge) 
    self.activityView.center = CGPointMake(130.5, 65.5) 
    self.activityView.color = UIColor.blackColor() 
} 

@IBAction func importFiles(sender: AnyObject){ 
    self.alert.view.addSubview(activityView) 
    self.presentViewController(alert, animated: true, completion: nil) 
    alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil)) 
    //Somehow here I want to make it so that the UIAlertAction is unclickable. 
    self.activityView.startAnimating() 
} 

Все работает, но я не могу найти способ получить действие, которое должно быть интерактивными только тогда, когда анимация завершена. Я попытался добавить действие к UIAlertViewController, и я снова представляю UIAlertViewController, когда загрузка закончена, но я получаю сообщение о том, что я не могу что-то представить, когда UIAlertViewController уже активен. Любая помощь будет оценена по достоинству. Благодаря!

ответ

1

Как правило, я бы рекомендовал не использовать alertview в качестве заполнителя для такой задачи. но, чтобы дать вам представление о том, посмотрите на это:

lazy var alert: UIAlertController = { 
    var alert = UIAlertController(title: "Please wait...", message: "Please wait for some seconds...", preferredStyle: .Alert) 
    alert.addAction(self.action) 
    return alert 
}() 
lazy var action: UIAlertAction = { 
    var action = UIAlertAction(title: "Ok", style: .Default, handler: nil) 
    action.enabled = false 
    return action 
}() 

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    self.presentViewController(alert, animated: true, completion: nil) 

    let delayInSeconds = 3.0 
    let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delayInSeconds * Double(NSEC_PER_SEC))) 
    dispatch_after(popTime, dispatch_get_main_queue()) {() -> Void in 
     self.action.enabled = true 
    } 
} 

где эта задержка часть

let delayInSeconds = 3.0 
let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delayInSeconds * Double(NSEC_PER_SEC))) 
dispatch_after(popTime, dispatch_get_main_queue()) {() -> Void in 
    self.action.enabled = true 
} 

должны быть заменены на вашей кокетливой логики.

удачи!

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