ActionSheet, Alert и UIAlertController
Самое главное для понимания ActionSheet и Alert это то, что это UIVewController, который отображается модально. Синтаксис написания обоих контроллеров — одинаковый. Различается лишь стиль, указанный в конструкторе UIAlertController. ActionSheet служит для выбора пользователем больше чем двух действий. Он отображается внизу экрана для iPhone/iPod Touch и popover для iPad. Alert служит для выбора двух действий (да/нет, больше/меньше и пр.). Alert отображается в центре экрана.
ActionSheet имплементируется следующим конструктором:
var alert = UIAlertController(title: "Заголовок", message: "сообщение под заголовком", preferredStyle: UIAlertControllerStyle.ActionSheet)
Обратите внимание на последний параметр, переданный в конструктор — он то и определяет что это будет ActionSheet. Далее добавим действия:
// //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.
Что почитать дальше?
Реальный пример работы ActionSheet, Alert и UIAlertController можно увидеть в статье Пример UIAlertController
Добавить комментарий