Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. iOS SDK
Code

Основы IOS: UIAlertView и UIAlertController

by
Difficulty:BeginnerLength:ShortLanguages:

Russian (Pусский) translation by Jenyia (you can also view the original English article)

Даже если вы только прикоснулись к миру разработки iOS, вы почти наверняка знаете о UIAlertView. Класс UIAlertView имеет простой интерфейс и используется для представления модальных окон предупреждений.

Однако Apple исключила UIAlertView в iOS 8. Начиная с iOS 8, рекомендуется использовать класс UIAlertController для представления списков действий и модальных окон предупреждений. В этом кратком совете я покажу вам, как легко перейти от UIAlertView к UIAlertController.

1. Настройка проекта

Запустите Xcode 6.3+ и создайте новый проект на основе шаблона приложения Single View.

Choose the Single View Application Template

Назовите проект Alerts, установите Язык на Swift и установите Устройства на iPhone. Укажите Xcode, где вы хотите сохранить файлы проекта, и нажмите Создать.

Configure the Project

Начнем с добавления кнопки для запуска предупреждения. Откройте файл Main.storyboard и добавьте кнопку на вид контроллера. Установите заголовок кнопки как Show Alert и добавьте необходимые ограничения на кнопку, чтобы сохранить ее на месте.

Create a Simple User Interface

Откройте ViewController.swift и добавьте действие в реализацию класса. Оставьте указания действия пустым на время. Перейдите к файлу Main.storyboard и соедините контроллер с действием showAlert при помощи события кнопки Touch Up Inside.

2. UIAlertView

Начнем с отображения представлений с использованием класса UIAlertView. Как я уже упоминал, интерфейс класса UIAlertView очень прост. Cистема позаботится о мельчайших деталях. Вот как выглядит обновленная реализация действия showAlert.

Инициализация проста. Мы размещаем заголовок и сообщение, передаем объект, заголовок для кнопки отмены и названия для любых других кнопок, которые мы хотели бы включить.

Объект делегата должен соответствовать протоколу UIAlertViewDelegate. Поскольку диспетчер представлений будет действовать как продолжение представления предупреждений, класс ViewController должен соответствовать протоколу UIAlertViewDelegate.

Методы протокола UIAlertViewDelegate определяются как необязательные. Метод, который вы будете использовать чаще всего, - alertView(_:clickedButtonAtIndex:). Этот метод вызывается, когда пользователь удаляет одну из кнопок вида предупреждения. Именно так может выглядеть реализация метода alertView(_:clickedButtonAtIndex:).

Создайте и запустите приложение в iOS Simulator, чтобы убедиться, что все работает должным образом.

3. UIAlertController

Интерфейс UIAlertController очень отличается от интерфейса UIAlertView, но мотивация Apple к переходу на класс UIAlertController становится понятной, как только вы его использовали несколько раз. Это элегантный интерфейс, который понятен интуитивно.

Первым преимуществом использования класса UIAlertController является отсутствие протокола для взаимодействия с пользователем. Это означает, что нам нужно только обновить реализацию действия showAlert. Взгляните на пример ниже.

Инициализация довольно проста. Мы передаем заголовок, сообщение и, самое главное, задаем предпочтительный стиль для UIAlertControllerStyle.Alert или .Alert для краткости. Предпочтительный стиль говорит системе, когда диспетчер предупреждений должен быть представлен как лист действий, .ActionSheet, а когда как модальное предупреждение, .Alert.

Вместо предоставления заголовков для кнопок и обработки взаимодействия с пользователем через протокол UIAlertViewDelegate мы добавляем действия в контроллер предупреждения. Каждое действие является экземпляром класса UIAlertAction. Создание UIAlertAction простое. Инициализатор принимает заголовок, стиль и обработчик. Аргумент стиля имеет тип UIAlertActionStyle. Обработчик - это замыкание, принимающее объект UIAlertAction в качестве единственного аргумента.

Использование обработчиков вместо протокола делает внедрение модального оповещения более элегантным и понятным. Больше нет необходимости помечать предупреждения, если вы работаете с несколькими модальными предупреждениями.

Прежде чем мы представим пользователю контроллер предупреждения, мы добавим два действия, вызвав addAction(_:) в объекте alertController. Обратите внимание, что порядок кнопок модального предупреждения определяется порядком, в котором действия добавляются в контроллер предупреждения.

Поскольку класс UIAlertController является подклассом UIViewController, представление контроллера предупреждений пользователю будет таким же простым, как вызов presentViewController(_:animated:completion:), передающий в контроллере предупреждения в качестве первого аргумента.

4. UIActionSheet

Неудивительно, что Apple также отказалась от класса UIActionSheet и протокола UIActionSheetDelegate. Начиная с iOS 8, рекомендуется использовать класс UIAlertController для представления списка действий.

Представление списка действий идентично представлению модального предупреждения. Единственное отличие - это свойство preferredStyle для контроллера предупреждений, которое должно быть установлено на UIAlertControllerStyle.ActionSheet или .ActionSheet для краткости для списков действий.

Вывод

Несмотря на то, что UIAlertView и UIActionSheet устарели в iOS 8, вы можете продолжить использовать их в обозримом будущем. Однако интерфейс класса UIAlertController является определенным улучшением. Он добавляет простоту и унифицирует API для представления модальных предупреждений и списков действий. И поскольку UIAlertController - это подкласс UIViewController, API уже будет знаком.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.