Agregar un UIAlertView simple

108

¿Qué código de inicio podría usar para crear un UIAlertView simple con un botón "Aceptar"?

Linuxmint
fuente
¿Quiere esperar para realizar una acción hasta que se haga clic en el botón Aceptar?
sudo rm -rf
1
@sudo rm -rf: No, solo necesito que diga "Dee dee doo doo" o algo así. No se necesitan acciones.
Linuxmint

Respuestas:

230

Cuando desee que se muestre la alerta, haga esto:

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

Si desea hacer algo cuando se hace clic en el botón, implemente este método de delegado:

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

Y asegúrese de que su delegado cumpla con el UIAlertViewDelegateprotocolo:

@interface YourViewController : UIViewController <UIAlertViewDelegate> 
sudo rm -rf
fuente
4
puede usar etiquetas si tiene más de una vista de alerta para determinar quién llamó al delegado.
Pnar Sbi Wer
71

Otras respuestas ya brindan información para iOS 7 y versiones anteriores, sin embargo, UIAlertViewestá obsoleto en iOS 8 .

En iOS 8+ debes usar UIAlertController. Es un reemplazo para ambos UIAlertViewy UIActionSheet. Documentación: Referencia de clase UIAlertController . Y un buen artículo sobre NSHipster .

Para crear una vista de alerta simple, puede hacer lo siguiente:

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

Rápido 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)

Tenga en cuenta que, dado que se agregó en iOS 8, este código no funcionará en iOS 7 y versiones anteriores. Entonces, lamentablemente, por ahora tenemos que usar verificaciones de versión así:

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

Rápido 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: actualizado para Swift 5. Se reemplazó la verificación de presencia de clase obsoleta con verificación de disponibilidad en Obj-C.

FreeNickname
fuente
1
No debe publicar código que podría funcionar pero no lo hace. En lugar de usar MyOwnUtilsClass, simplemente escriba el código que verifica la versión de iOS.
csharpwinphonexaml
1
@csharpwinphonexaml, no estoy de acuerdo. Sería una complicación innecesaria del código. La versión actual ilustra el uso de UIAlerView / UIAlertController, mientras que la verificación de la versión del sistema no es el tema de esta pregunta. En Swift hay un método integrado de una línea para verificar la versión del sistema operativo, así que lo usé. Objective-C tiene varios métodos, pero ninguno de ellos es elegante.
FreeNickname
1
Lo dije porque sé que no todos son expertos en comprender cada fragmento de código y saber cómo reemplazarlo por uno que funcione.
csharpwinphonexaml
10

UIAlertView está obsoleto en iOS 8. Por lo tanto, para crear una alerta en iOS 8 y superior, se recomienda utilizar 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];

Así es como lo he implementado.

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

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

Como complemento de las dos respuestas anteriores (del usuario "sudo rm -rf" y "Evan Mulawski"), si no desea hacer nada cuando se hace clic en la vista de alerta, puede asignarla, mostrarla y liberarla. No es necesario que declare el protocolo de delegado.

Di Wu
fuente
3

Aquí hay un método completo que solo tiene un botón, un 'ok', para cerrar la 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
fuente
1

Esta página muestra cómo agregar un UIAlertController si está utilizando Swift.

agua de rosas
fuente
0

Alerta simple con datos 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
fuente
-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
fuente