Adicionar um UIAlertView simples

108

Quais códigos iniciais eu poderia usar para fazer um UIAlertView simples com um botão "OK" nele?

Linuxmint
fonte
Você deseja aguardar para executar uma ação até que o botão OK seja clicado?
sudo rm -rf
1
@sudo rm -rf: Não, só preciso dizer "Dee dee doo doo" ou algo assim. Nenhuma ação necessária.
Linuxmint

Respostas:

230

Quando quiser que o alerta seja exibido, faça o seguinte:

    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];

Se você quiser fazer algo quando o botão for clicado, implemente este método delegado:

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

E certifique-se de que seu delegado está em conformidade com o UIAlertViewDelegateprotocolo:

@interface YourViewController : UIViewController <UIAlertViewDelegate> 
sudo rm -rf
fonte
4
você pode usar tags se tiver mais de 1 visualizações de alerta para determinar quem chamou o delegado.
Pnar Sbi Wer
71

Outras respostas já fornecem informações para iOS 7 e anteriores, no entanto, UIAlertViewestá obsoleto no iOS 8 .

No iOS 8+ você deve usar UIAlertController. É um substituto para ambos UIAlertViewe UIActionSheet. Documentação: Referência de classe UIAlertController . E um bom artigo sobre NSHipster .

Para criar uma Visualização de alerta simples, você pode fazer o seguinte:

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)

Observe que, como foi adicionado no iOS 8, esse código não funcionará no iOS 7 e anteriores. Então, infelizmente, por agora temos que usar verificações de versão como:

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: atualizado para Swift 5. Substituído verificação de presença de classe desatualizada com verificação de disponibilidade em Obj-C.

FreeNickname
fonte
1
Você não deve postar código que poderia funcionar, mas não funciona. Em vez de usar MyOwnUtilsClass, apenas escreva o código que verifica a versão do ios.
csharpwinphonexaml
1
@csharpwinphonexaml, não concordo. Seria uma complicação desnecessária do código. A versão atual ilustra o uso do UIAlerView / UIAlertController, enquanto a verificação da versão do sistema não é o tópico desta questão. No Swift existe um método integrado de uma linha para verificar a versão do sistema operacional, então eu o usei. Objective-C tem vários métodos, mas nenhum deles é elegante.
FreeNickname
1
Eu disse isso porque sei que nem todo mundo é especialista em entender cada parte do código e saber como substituí-lo por um funcional.
csharpwinphonexaml
10

UIAlertView está obsoleto no iOS 8. Portanto, para criar um alerta no iOS 8 e superior, é recomendado usar 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];

É assim que eu o implementei.

Chanced270
fonte
9
UIAlertView *alert = [[UIAlertView alloc]
 initWithTitle:@"Title" 
 message:@"Message" 
 delegate:nil //or self
 cancelButtonTitle:@"OK"
 otherButtonTitles:nil];

 [alert show];
 [alert autorelease];
Evan Mulawski
fonte
9
UIAlertView *myAlert = [[UIAlertView alloc] 
                         initWithTitle:@"Title"
                         message:@"Message"
                         delegate:self
                         cancelButtonTitle:@"Cancel"
                         otherButtonTitles:@"Ok",nil];
[myAlert show];
Brynner Ferreira
fonte
9

Como um complemento às duas respostas anteriores (do usuário "sudo rm -rf" e "Evan Mulawski"), se você não quiser fazer nada quando sua visualização de alerta for clicada, você pode apenas alocá-la, exibi-la e liberá-la. Você não precisa declarar o protocolo de delegado.

Di Wu
fonte
3

Aqui está um método completo que possui apenas um botão, um 'ok', para fechar o 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
fonte
1

Esta página mostra como adicionar um UIAlertController se você estiver usando Swift.

água de rosas
fonte
0

Alerta simples com dados de matriz:

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];
Bhupendrasingh Lohar
fonte
-1

Para 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)
Nyakiba
fonte