як реалізувати діалогове вікно спливаючого вікна в 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 не рекомендуються в прошивці 8. (Помітять , що UIActionSheetDelegateтакож НЕ рекомендуються.) Для створення і управління листами дій в прошивці 8 , а потім, замість того, щоб використовувати UIAlertControllerз preferredStyleз UIAlertControllerStyleActionSheet.

Модальний вигляд (покажіть мені приклад)

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

Модальний вид є самодостатнім видом , який має все необхідне для виконання завдання. Він може або не може займати весь екран. Щоб створити модальний вигляд, використовуйте a UIPresentationControllerз одним із модальних стилів презентації .

Дивись також

Поповер (покажіть мені приклад)

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

Поповеров вид , який з'являється , коли користувач крани на що - то і зникає при торканні від нього. На ній є стрілка із зазначенням елемента керування чи місцезнаходження, звідки зроблено кран. Вміст може бути майже всім, що ви можете помістити в контролер перегляду. Ви робите popover з a UIPopoverPresentationController. (Раніше UIPopoverControllerрекомендованим методом був iOS 8 ).

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

Дивись також

Сповіщення

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

Сповіщення - це звуки / вібрації, сповіщення / банери або значки, які сповіщають користувача про щось, навіть коли програма не працює на передньому плані.

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

Дивись також

Примітка про Android Toasts

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

В Android, Toast - це коротке повідомлення, яке відображається на екрані на короткий час, а потім автоматично зникає, не порушуючи взаємодії користувачів із додатком.

Люди, які походять з 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];
}

Якщо в моєму прикладі "Я" - це 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 застаріло.
Парт Сане

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.