как реализовать всплывающее диалоговое окно в iOS


303

После расчета я хочу отобразить всплывающее окно или окно предупреждения, передающее сообщение пользователю. Кто-нибудь знает, где я могу найти больше информации об этом?

Ответы:


517

Да, это UIAlertView, вероятно, то, что вы ищете. Вот пример:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No network connection" 
                                                message:@"You must be connected to the internet to use this app." 
                                               delegate:nil 
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];
[alert show];
[alert release];

Если вы хотите сделать что-то более причудливое, скажем, отобразить пользовательский интерфейс в своем UIAlertView, вы можете UIAlertViewсоздать подкласс и вставить пользовательские компоненты пользовательского интерфейса в initметод. Если вы хотите реагировать на нажатие кнопки после появления UIAlertViewзначка, вы можете установить delegateвышеприведенное и реализовать - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexметод.

Вы также можете посмотреть на UIActionSheet.


45
В документации Apple говорится, что «класс UIAlertView предназначен для использования как есть и не поддерживает создание подклассов». developer.apple.com/library/ios/#documentation/uikit/reference/…
JOM

40
Просто комментарий: при включенном ARC «[выпуск оповещения]» не нужен (по крайней мере, так говорит компилятор).
Хавьер Седано

4
Создание подклассов UIAlertView не поддерживается iOS 4 и выше
xySVerma

1
Вот пример простого UIAlertView с делегатом, если вам также нужны действия кнопок
guilherme.minglini

2
В случае , если вы ищете вариант быстрой, проверить Оскара Swanros' ответ
Рожерио Chaves

177

Разные люди, которые приходят к этому вопросу, имеют в виду всплывающие окна разные вещи. Я настоятельно рекомендую прочитать документацию временного просмотра . Мой ответ в значительной степени является кратким изложением этой и другой связанной документации.

Оповещение (покажи мне пример)

введите описание изображения здесь

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

Стоит процитировать в документации предупреждение и советы по созданию ненужных оповещений.

введите описание изображения здесь

Ноты:

Лист действий (покажи пример)

введите описание изображения здесь

Таблицы действий предоставляют пользователю список вариантов. Они появляются либо внизу экрана, либо во всплывающем окне в зависимости от размера и ориентации устройства. Как и в случае с оповещениями, UIAlertControllerдля создания листа действий. До этого использовалась iOS 8, UIActionSheetно теперь в документации сказано:

Важно: UIActionSheet не рекомендуется в iOS 8. (Обратите внимание, что UIActionSheetDelegateэто также не рекомендуется.) Для создания и управления листами действий в iOS 8 и более поздних версиях вместо этого используйте UIAlertControllerс preferredStyleof UIAlertControllerStyleActionSheet.

Модальный вид (покажи мне пример)

введите описание изображения здесь

Модальный вид является самодостаточным видом , который имеет все необходимое для выполнения задачи. Это может или не может занять весь экран. Чтобы создать модальное представление, используйте UIPresentationControllerодин из модальных стилей представления .

Смотрите также

Popover (покажи мне пример)

введите описание изображения здесь

Поповер вид , который появляется , когда пользователь краны на что - то и исчезает при касании от него. У него есть стрелка, показывающая элемент управления или место, откуда был сделан кран. Контент может быть чем угодно, что вы можете поместить в View Controller. Вы делаете поповер с UIPopoverPresentationController. (До iOS 8 UIPopoverControllerбыл рекомендуемый метод.)

В прошлом всплывающие окна были доступны только на iPad, но начиная с iOS 8 вы также можете получить их на iPhone (см. Здесь , здесь и здесь ).

Смотрите также

Уведомления

введите описание изображения здесь

Уведомления - это звуки / вибрации, оповещения / баннеры или значки, которые уведомляют пользователя о чем-либо, даже если приложение не работает на переднем плане.

введите описание изображения здесь

Смотрите также

Примечание о Android Тосты

введите описание изображения здесь

В Android тост - это короткое сообщение, которое отображается на экране в течение короткого промежутка времени, а затем автоматически исчезает, не нарушая взаимодействия пользователя с приложением.

Люди, пришедшие из Android, хотят знать, что такое iOS-версия Toast. Некоторые примеры этих вопросов он может найти здесь , здесь , здесь и здесь . Ответ в том, что в iOS нет эквивалента Toast . Различные обходные пути, которые были представлены, включают в себя:

  • Сделайте свой собственный с подклассами UIView
  • Импортировать сторонний проект, имитирующий тост
  • Используйте оповещение без кнопки с таймером

Однако мой совет - придерживаться стандартных опций пользовательского интерфейса, которые уже поставляются с iOS. Не пытайтесь заставить ваше приложение выглядеть и вести себя точно так же, как версия для Android. Подумайте, как упаковать его, чтобы он выглядел и выглядел как приложение для iOS.


3
С запиской про Android Toast еще! Ницца! Эта информация помогает новым разработчикам, которые приходят от разработки Android. Спасибо!
Филипе Брито

3
Человек, мне нужно распечатать и создать это! Вы спасли меня вчера и сегодня снова: D
finngu

58

Начиная с выпуска iOS 8, UIAlertViewтеперь устарела; UIAlertController является заменой.

Вот пример того, как это выглядит в Swift:

let alert = UIAlertController(title: "Hello!", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
let alertAction = UIAlertAction(title: "OK!", style: UIAlertActionStyle.default)
{
    (UIAlertAction) -> Void in
}
alert.addAction(alertAction)
present(alert, animated: true)
{
    () -> Void in
}

Как видите, API позволяет нам реализовывать обратные вызовы как для действия, так и для представления оповещения, что очень удобно!

Обновлено для Swift 4.2

let alert = UIAlertController(title: "Hello!", message: "Message", preferredStyle: UIAlertController.Style.alert)
let alertAction = UIAlertAction(title: "OK!", style: UIAlertAction.Style.default)
        {
            (UIAlertAction) -> Void in
        }
        alert.addAction(alertAction)
        present(alert, animated: true)
        {
            () -> Void in
        }

@Entalpi Должен ли presentViewController иметь закрывающую фигурную скобку и в чем разница между вашим блоком завершения и просто завершением: ноль?
Эндрю Пламмер

Это без разницы. Если существует блок для вызова, он будет вызван.
Энтальпи

25

Обновлено для iOS 8.0

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

-(void)alertMessage:(NSString*)message
{
    UIAlertController* alert = [UIAlertController
          alertControllerWithTitle:@"Alert"
          message:message
          preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* defaultAction = [UIAlertAction 
          actionWithTitle:@"OK" style:UIAlertActionStyleDefault
         handler:^(UIAlertAction * action) {}];

    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
}

Где self в моем примере - это UIViewController, который реализует метод presentViewController для всплывающего окна.

Дэвид


11

Для Swift 3 и Swift 4:

Поскольку UIAlertView устарела, есть хороший способ для отображения оповещений в Swift 3

let alertController = UIAlertController(title: NSLocalizedString("No network connection",comment:""), message: NSLocalizedString("connected to the internet to use this app.",comment:""), preferredStyle: .alert)
let defaultAction = UIAlertAction(title:     NSLocalizedString("Ok", comment: ""), style: .default, handler: { (pAlert) in
                //Do whatever you want here
        })
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)

Устаревший:

Это быстрая версия, вдохновленная проверенным ответом:

Показать AlertView:

   let alert = UIAlertView(title: "No network connection", 
                           message: "You must be connected to the internet to use this app.", delegate: nil, cancelButtonTitle: "Ok")
    alert.delegate = self
    alert.show()

Добавьте делегата к вашему контроллеру представления:

class AgendaViewController: UIViewController, UIAlertViewDelegate

Когда пользователь нажмет на кнопку, этот код будет выполнен:

func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {


}

UIAlertView теперь устарела.
Parth Sane

7

Хотя я уже написал обзор разных видов всплывающих окон, большинству людей просто нужно оповещение.

Как реализовать всплывающее диалоговое окно

введите описание изображения здесь

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {

        // create the alert
        let alert = UIAlertController(title: "My Title", message: "This is my message.", preferredStyle: UIAlertController.Style.alert)

        // add an action (button)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))

        // show the alert
        self.present(alert, animated: true, completion: nil)
    }
}

Мой более полный ответ здесь .


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.