Добавление простого UIAlertView

108

Какой начальный код я мог бы использовать, чтобы создать простой UIAlertView с одной кнопкой «ОК»?

Linuxmint
источник
Вы хотите дождаться выполнения действия, пока не будет нажата кнопка ОК?
sudo rm -rf
1
@sudo rm -rf: Нет, мне просто нужно, чтобы он сказал: «Ди-ди-ду-ду» или что-то в этом роде. Никаких действий не требуется.
Linuxmint,

Ответы:

230

Если вы хотите, чтобы предупреждение отображалось, сделайте следующее:

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ROFL" 
                                                    message:@"Dee dee doo doo." 
                                                    delegate:self 
                                                    cancelButtonTitle:@"OK" 
                                                    otherButtonTitles:nil];
[alert show];

    // If you're not using ARC, you will need to release the alert view.
    // [alert release];

Если вы хотите что-то делать при нажатии кнопки, реализуйте этот метод делегата:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    // the user clicked OK
    if (buttonIndex == 0) {
        // do something here...
    }
}

И убедитесь, что ваш делегат соответствует UIAlertViewDelegateпротоколу:

@interface YourViewController : UIViewController <UIAlertViewDelegate> 
sudo rm -rf
источник
4
вы можете использовать теги, если у вас более одного представления предупреждений, чтобы определить, кто звонил делегату.
Pnar Sbi Wer
71

В других ответах уже есть информация для iOS 7 и старше, однако UIAlertViewв iOS 8 они устарели .

В iOS 8+ вы должны использовать UIAlertController. Это замена как UIAlertViewи UIActionSheet. Документация: Справочник по классу UIAlertController . И хорошая статья о NSHipster .

Чтобы создать простой просмотр предупреждений, вы можете сделать следующее:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title"
                                                                         message:@"Message"
                                                                  preferredStyle:UIAlertControllerStyleAlert];
//We add buttons to the alert controller by creating UIAlertActions:
UIAlertAction *actionOk = [UIAlertAction actionWithTitle:@"Ok"
                                                   style:UIAlertActionStyleDefault
                                                 handler:nil]; //You can use a block here to handle a press on this button
[alertController addAction:actionOk];
[self presentViewController:alertController animated:YES completion:nil];

Swift 3/4/5:

let alertController = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
//We add buttons to the alert controller by creating UIAlertActions:
let actionOk = UIAlertAction(title: "OK",
    style: .default,
    handler: nil) //You can use a block here to handle a press on this button

alertController.addAction(actionOk)

self.present(alertController, animated: true, completion: nil)

Обратите внимание, что, поскольку он был добавлен в iOS 8, этот код не будет работать на iOS 7 и старше. Итак, к сожалению, пока мы должны использовать такие проверки версий:

NSString *alertTitle = @"Title";
NSString *alertMessage = @"Message";
NSString *alertOkButtonText = @"Ok";

if (@available(iOS 8, *)) {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:alertTitle
                                                        message:alertMessage
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:alertOkButtonText, nil];
    [alertView show];
}
else {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:alertTitle
                                                                             message:alertMessage
                                                                      preferredStyle:UIAlertControllerStyleAlert];
    //We add buttons to the alert controller by creating UIAlertActions:
    UIAlertAction *actionOk = [UIAlertAction actionWithTitle:alertOkButtonText
                                                       style:UIAlertActionStyleDefault
                                                     handler:nil]; //You can use a block here to handle a press on this button
    [alertController addAction:actionOk];
    [self presentViewController:alertController animated:YES completion:nil];
}

Swift 3/4/5:

let alertTitle = "Title"
let alertMessage = "Message"
let alertOkButtonText = "Ok"

if #available(iOS 8, *) {
    let alertController = UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: .alert)
    //We add buttons to the alert controller by creating UIAlertActions:
    let actionOk = UIAlertAction(title: alertOkButtonText,
        style: .default,
        handler: nil) //You can use a block here to handle a press on this button

    alertController.addAction(actionOk)
    self.present(alertController, animated: true, completion: nil)
}
else {
    let alertView = UIAlertView(title: alertTitle, message: alertMessage, delegate: nil, cancelButtonTitle: nil, otherButtonTitles: alertOkButtonText)
    alertView.show()
}

UPD: обновлено для Swift 5. Заменена проверка наличия устаревшего класса на проверку доступности в Obj-C.

FreeNickname
источник
1
Вы не должны размещать код, который может работать, но не работает. Вместо использования MyOwnUtilsClass просто напишите код, который проверяет версию ios.
csharpwinphonexaml
1
@csharpwinphonexaml, я не согласен. Это было бы ненужным усложнением кода. Текущая версия иллюстрирует использование UIAlerView / UIAlertController, тогда как проверка версии системы не является темой этого вопроса. В Swift есть встроенный однострочный метод проверки версии ОС, поэтому я его и использовал. В Objective-C есть несколько методов, но ни один из них не является элегантным.
FreeNickname
1
Я сказал это, потому что знаю, что не все разбираются в каждом фрагменте кода и знают, как заменить его работающим.
csharpwinphonexaml
10

UIAlertView устарел в iOS 8. Поэтому для создания оповещения в iOS 8 и выше рекомендуется использовать UIAlertController:

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Title" message:@"Alert Message" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){

    // Enter code here
}];
[alert addAction:defaultAction];

// Present action where needed
[self presentViewController:alert animated:YES completion:nil];

Вот как я это реализовал.

Вероятно270
источник
9
UIAlertView *alert = [[UIAlertView alloc]
 initWithTitle:@"Title" 
 message:@"Message" 
 delegate:nil //or self
 cancelButtonTitle:@"OK"
 otherButtonTitles:nil];

 [alert show];
 [alert autorelease];
Эван Мулавски
источник
9
UIAlertView *myAlert = [[UIAlertView alloc] 
                         initWithTitle:@"Title"
                         message:@"Message"
                         delegate:self
                         cancelButtonTitle:@"Cancel"
                         otherButtonTitles:@"Ok",nil];
[myAlert show];
Бриннер Феррейра
источник
9

В дополнение к двум предыдущим ответам (пользователя «sudo rm -rf» и «Evan Mulawski»), если вы не хотите ничего делать при щелчке по вашему представлению предупреждений, вы можете просто выделить, показать и освободить его. Вам не нужно объявлять протокол делегата.

Ди Ву
источник
3

Вот полный метод, в котором есть только одна кнопка, «ок», для закрытия UIAlert:

- (void) myAlert: (NSString*)errorMessage
{
    UIAlertView *myAlert = [[UIAlertView alloc]
                          initWithTitle:errorMessage
                          message:@""
                          delegate:self
                          cancelButtonTitle:nil
                          otherButtonTitles:@"ok", nil];
    myAlert.cancelButtonIndex = -1;
    [myAlert setTag:1000];
    [myAlert show];
}
MGM
источник
0

Простое оповещение с данными массива:

NSString *name = [[YourArray objectAtIndex:indexPath.row ]valueForKey:@"Name"];

NSString *msg = [[YourArray objectAtIndex:indexPath.row ]valueForKey:@"message"];

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:name
                                                message:msg
                                               delegate:self
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];
[alert show];
Бхупендрасингх Лохар
источник
-1

Для Swift 3:

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
Някиба
источник