2015-02-20 4 views
2

Есть ли способ отклонить все UIAlertControllers, которые в настоящее время представлены?Отклонить все UIAlertКонтроллеры в настоящее время представлены

Это специально потому, что из любого места и любого состояния моего приложения мне нужно добраться до определенного ViewController при нажатии push-уведомления.

+0

Что вы имеете в виду _все_ UIAlertControllers? Все UIAlertControllers представлены? – Cesare

+0

@CeceXX Любой представленный UIAlertController. Отредактировано название и текст, чтобы указать – David

+0

. Итак, вы хотите не представлять UIAlertController или хотите уволить тех, кто представлен? – Cesare

ответ

3

Вы можете создать подкласс ваши UIAlertController с, прикрепить NSNotification наблюдателей к каждому, которые бы вызвать метод в UIAlertController подклассу отклонить оповещения контроллера, а затем опубликовать NSNotification всякий раз, когда вы будете готовы уволить, например:

class ViewController: UIViewController { 
    func presentAlert() { 
     // Create alert using AlertController subclass 
     let alert = AlertController(title: nil, message: "Message.", preferredStyle: UIAlertControllerStyle.Alert) 
     // Add observer to the alert 
     NSNotificationCenter.defaultCenter().addObserver(alert, selector: Selector("hideAlertController"), name: "DismissAllAlertsNotification", object: nil) 
     // Present the alert 
     self.presentViewController(alert, animated: true, completion:nil) 
    } 
} 

// AlertController subclass with method to dismiss alert controller 
class AlertController: UIAlertController { 
    func hideAlertController() { 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 
} 

Затем опубликовать уведомление каждый раз, когда вы будете готовы закрыть предупреждение (в данном случае, при нажатии на уведомление толчок):

NSNotificationCenter.defaultCenter().postNotificationName("DismissAllAlertsNotification", object: nil) 
+0

в [docs] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAlertController_class/) упоминается, что UIAletController не поддерживает подклассы. Верьте, что решения могут быть отклонены. – Vov4yk

+0

@ Vov4yk Я тестировал этот код, прежде чем отправлять его, и это сработало для меня. –

+0

@ Vov4yk Но также обратите внимание, что я никогда ничего не модифицировал UIAlertController в этом подклассе ... Я просто добавил новый метод, т. Е. HideAlertController. –

1

Вы можете уволить UIAlertController, что в настоящее время представляются пользователю таким образом:

self.dismissViewControllerAnimated(true, completion: nil) 
1

Они являются модальными: там будет только один из них в любое время, и это будет иметь полный фокус.

Вы несете ответственность за создание своих оповещений, и именно пользователь должен их отклонить. Вам нужно сделать (или использовать) настраиваемое представление, чтобы отобразить стек сообщений, если вам нужен дополнительный контроль.