A​ction​S​heet, Alert и UIAlertController

Самое главное для понимания A​ction​S​heet и Alert это то, что это UIVewController, который отображается модально. Синтаксис написания обоих контроллеров — одинаковый. Различается лишь стиль, указанный в конструкторе UIAlertController.  A​ction​S​heet  служит для выбора пользователем больше чем двух действий. Он отображается внизу экрана для iPhone/iPod Touch и popover для iPad. Alert служит для выбора двух действий (да/нет, больше/меньше и пр.). Alert отображается в центре экрана.

A​ction​S​heet​ имплементируется следующим конструктором:

var alert = UIAlertController(title: "Заголовок", message: "сообщение под заголовком", preferredStyle: UIAlertControllerStyle.ActionSheet)

Обратите внимание на последний параметр, переданный в конструктор — он то и определяет что это будет A​ction​S​heet. Далее добавим действия:

//
//proSwift.ru
//
alert.addAction(UIAlertAction(title: "Действие 1", style: UIAlertActionStyle.Default) { (action: UIAlertAction) -> Void in
                // делаем что-то при выборе действия 1
            })
alert.addAction(UIAlertAction(title: "Действие 2", style: UIAlertActionStyle.Default) { (action: UIAlertAction) -> Void in
                // делаем что-то при выборе действия 2
            })
alert.addAction(UIAlertAction(title: "Действие 3", style: UIAlertActionStyle.Default) { (action: UIAlertAction) -> Void in
                // делаем что-то при выборе действия 3
            })
alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel) { (sender: UIAlertAction) -> Void in
            // ничего не делаем
            })

Для iPad нужно задать параметры popoverController, для того чтобы знать куда будет показывать стрелочка этого контроллера

alert.modalPresentationStyle = .Popover
let ppc = alert.popoverPresentationController
ppc?.barButtonItem = someSenderButton

someSenderButton — это кнопка, которая вызывает этот ActionSheet, хотя это может быть любой объект UI. На iPad не появится кнопка «Cancel» однако если нажать за пределами  popoverController’а, то замыкание для  Action Cancel все равно выполнится. 

Ну и показать контроллер поможет нам метод viewController’а presentViewController:

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

Alert

//
//proSwift.ru
//
let alert = UIAlertController(title: "Заголовок", message: "Сообщение под заголовком", preferredStyle: .Alert)
    alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel) {
        (sender: UIAlertAction) -> Void in
    })
        
alert.addTextFieldWithConfigurationHandler { (textField) -> Void in
        textField.placeholder = "Enter password here"
    }

alert.addAction(UIAlertAction(title: "Login", style: .Default)
    { (sender: UIAlertAction) -> Void in
                
         // get password and log in
                
        let tf = self.alert.textFields?.first
        if tf != nil {
            if tf!.text != nil {
                self.loginWithPassword(tf!.text!)
            }
        }
    })

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

Как видите, почти то же самое что и ActionSheet, только в конструкторе в последний параметр передано preferredStyle: .Alert. Также мы добавили текстовое поле для запроса информации от пользователя. Для получения введенного текста используем следующий подход:

alert.textFields

возвращает опцианальный массив текстовых полей (их же может и не быть) типа [Any Object]?. Мы берем первый элемент из этого массива и приводим его  UITextField.

 

Что почитать дальше?

Реальный пример работы A​ction​S​heet, Alert и UIAlertController можно увидеть в статье Пример UIAlertController

Добавить комментарий

Ваш адрес email не будет опубликован.

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.