Cómo implementar un cuadro de diálogo emergente en iOS


303

Después de un cálculo, quiero mostrar una ventana emergente o un cuadro de alerta que transmite un mensaje al usuario. ¿Alguien sabe dónde puedo encontrar más información sobre esto?

Respuestas:


517

Sí, a UIAlertViewes probablemente lo que estás buscando. Aquí hay un ejemplo:

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

Si desea hacer algo más elegante, digamos que muestre una IU personalizada en su UIAlertView, puede subclasificar UIAlertViewy colocar componentes de IU personalizados en el initmétodo. Si desea responder a una pulsación de botón después de que UIAlertViewaparezca un , puede configurar lo delegateanterior e implementar el - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexmétodo.

También es posible que desee ver el UIActionSheet.


45
La documentación de Apple dice "La clase UIAlertView está diseñada para usarse tal cual y no admite subclases". developer.apple.com/library/ios/#documentation/uikit/reference/…
JOM

40
Solo un comentario: con ARC habilitado, el '[lanzamiento de alerta]' no es necesario (al menos, el compilador lo dice).
Javier Sedano

44
Subclasificar UIAlertView no es compatible con iOS 4 en adelante
xySVerma

1
Aquí hay un ejemplo de un simple UIAlertView con delegado, si también necesita las acciones de los botones
guilherme.minglini

2
En caso de que esté buscando una versión rápida, consulte la respuesta de Oscar Swanros
Rogerio Chaves

177

Diferentes personas que vienen a esta pregunta quieren decir cosas diferentes por un cuadro emergente. Recomiendo leer la documentación de Vistas temporales . Mi respuesta es en gran medida un resumen de esta y otra documentación relacionada.

Alerta (muéstrame un ejemplo)

ingrese la descripción de la imagen aquí

Las alertas muestran un título y un mensaje opcional. El usuario debe reconocerlo (una alerta de un botón) o hacer una elección simple (una alerta de dos botones) antes de continuar. Crea una alerta con un UIAlertController.

Vale la pena citar las advertencias y consejos de la documentación sobre la creación de alertas innecesarias.

ingrese la descripción de la imagen aquí

Notas:

Hoja de acción (muéstrame un ejemplo)

ingrese la descripción de la imagen aquí

Las hojas de acción le dan al usuario una lista de opciones. Aparecen en la parte inferior de la pantalla o en una ventana emergente, dependiendo del tamaño y la orientación del dispositivo. Al igual que con las alertas, a UIAlertControllerse usa para hacer una hoja de acción. Antes UIActionSheetse usaba iOS 8, pero ahora la documentación dice:

Importante: UIActionSheet está en desuso en iOS 8. (Tenga en cuenta que UIActionSheetDelegatetambién está en desuso). Para crear y administrar hojas de acción en iOS 8 y versiones posteriores, utilice en su lugar UIAlertControllercon un preferredStylede UIAlertControllerStyleActionSheet.

Vista modal (muéstrame un ejemplo)

ingrese la descripción de la imagen aquí

Una vista modal es una vista autónoma que tiene todo lo que necesita para completar una tarea. Puede o no ocupar la pantalla completa. Para crear una vista modal, use a UIPresentationControllercon uno de los estilos de presentación modal .

Ver también

Popover (muéstrame un ejemplo)

ingrese la descripción de la imagen aquí

Un Popover es una vista que aparece cuando un usuario toca algo y desaparece cuando lo toca. Tiene una flecha que muestra el control o la ubicación desde donde se realizó el toque. El contenido puede ser casi cualquier cosa que pueda poner en un controlador de vista. Haces un popover con a UIPopoverPresentationController. (Antes de iOS 8, UIPopoverControllerera el método recomendado).

En el pasado, los popovers solo estaban disponibles en el iPad, pero a partir de iOS 8 también puedes obtenerlos en un iPhone (mira aquí , aquí y aquí ).

Ver también

Notificaciones

ingrese la descripción de la imagen aquí

Las notificaciones son sonidos / vibraciones, alertas / pancartas o distintivos que notifican al usuario de algo, incluso cuando la aplicación no se está ejecutando en primer plano.

ingrese la descripción de la imagen aquí

Ver también

Una nota sobre las tostadas de Android

ingrese la descripción de la imagen aquí

En Android, un Toast es un mensaje corto que se muestra en la pantalla durante un corto período de tiempo y luego desaparece automáticamente sin interrumpir la interacción del usuario con la aplicación.

Las personas que provienen de un fondo Android quieren saber cuál es la versión iOS de un Toast. Puede encontrar algunos ejemplos de estas preguntas aquí , aquí , aquí y aquí . La respuesta es que no hay equivalente a un Toast en iOS . Varias soluciones alternativas que se han presentado incluyen:

  • Haz el tuyo con una subclase UIView
  • Importe un proyecto de terceros que imite una tostada
  • Use una alerta sin botones con un temporizador

Sin embargo, mi consejo es seguir con las opciones de interfaz de usuario estándar que ya vienen con iOS. No intentes hacer que tu aplicación se vea y se comporte exactamente igual que la versión de Android. Piense en cómo volver a empaquetarlo para que se vea y se sienta como una aplicación de iOS.


3
¡Con una nota sobre Android Toast todavía! ¡Agradable! Esta información ayuda a los nuevos desarrolladores que provienen del desarrollo de Android. ¡Gracias!
Filipe Brito

3
Hombre, necesito imprimir y enmarcar esto! Me salvaste ayer y hoy de nuevo: D
finngu

58

Desde el lanzamiento de iOS 8, UIAlertViewahora está en desuso; UIAlertController es el reemplazo.

Aquí hay una muestra de cómo se ve en 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
}

Como puede ver, la API nos permite implementar devoluciones de llamada tanto para la acción como cuando presentamos la alerta, ¡lo cual es bastante útil!

Actualizado para 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 ¿Debería presentViewController tener una llave de cierre y cuál es la diferencia entre su bloque de finalización y simplemente completarla: nulo?
Andrew Plummer

No hay diferencia. Si existe un bloque para llamar, se llamará.
Entalpi

25

Actualizado para iOS 8.0

Desde iOS 8.0, deberá usar UIAlertController de la siguiente manera:

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

Donde self en mi ejemplo es un UIViewController, que implementa el método "presentViewController" para una ventana emergente.

David


11

Para Swift 3 y Swift 4:

Como UIAlertView está en desuso, existe una buena manera de mostrar Alert en 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)

Obsoleto :

Esta es la versión rápida inspirada en la respuesta comprobada:

Mostrar 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()

Agregue el delegado a su controlador de vista:

class AgendaViewController: UIViewController, UIAlertViewDelegate

Cuando el usuario haga clic en el botón, se ejecutará este código:

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


}

UIAlertView ahora está en desuso.
Parth Sane

7

Aunque ya escribí una descripción general de los diferentes tipos de ventanas emergentes, la mayoría de las personas solo necesitan una Alerta.

Cómo implementar un cuadro de diálogo emergente

ingrese la descripción de la imagen aquí

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)
    }
}

Mi respuesta más completa está aquí .


0

Aquí está la versión de C # en Xamarin.iOS

var alert = new UIAlertView("Title - Hey!", "Message - Hello iOS!", null, "Ok");
alert.Show();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.