como implementar uma caixa de diálogo pop-up no iOS


303

Após um cálculo, desejo exibir uma caixa de pop-up ou alerta que transmita uma mensagem ao usuário. Alguém sabe onde posso encontrar mais informações sobre isso?

Respostas:


517

Sim, UIAlertViewprovavelmente é o que você está procurando. Aqui está um exemplo:

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

Se você deseja fazer algo mais sofisticado, digamos, exibir uma interface do usuário personalizada na sua UIAlertView, você pode subclassificar UIAlertViewe colocar componentes de interface do usuário personalizados no initmétodo. Se você deseja responder a um pressionamento de botão após a UIAlertViewexibição, é possível definir o delegateacima e implementar o - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexmétodo.

Você também pode querer olhar para o UIActionSheet.


45
A documentação da Apple diz "A classe UIAlertView deve ser usada no estado em que se encontra e não suporta subclasses". developer.apple.com/library/ios/#documentation/uikit/reference/…
JOM

40
Apenas um comentário: com o ARC ativado, o '[release de alerta]' não é necessário (pelo menos, o compilador diz isso).
Javier Sedano

4
A subclassificação do UIAlertView não é compatível com iOS 4 e
posteriores

1
Aqui está um exemplo de um UIAlertView simples com delegado, se você também precisa as ações botões
guilherme.minglini

2
Caso esteja procurando uma versão rápida, confira a resposta de Oscar Swanros
Rogerio Chaves

177

Pessoas diferentes que chegam a essa pergunta significam coisas diferentes em uma caixa pop-up. Eu recomendo a leitura da documentação das Exibições Temporárias . Minha resposta é em grande parte um resumo desta e de outras documentações relacionadas.

Alerta (mostre-me um exemplo)

insira a descrição da imagem aqui

Os alertas exibem um título e uma mensagem opcional. O usuário deve reconhecê-lo (um alerta de um botão) ou fazer uma escolha simples (um alerta de dois botões) antes de continuar. Você cria um alerta com um UIAlertController.

Vale citar o aviso e os conselhos da documentação sobre a criação de alertas desnecessários.

insira a descrição da imagem aqui

Notas:

Folha de ação (mostre-me um exemplo)

insira a descrição da imagem aqui

As folhas de ação fornecem ao usuário uma lista de opções. Eles aparecem na parte inferior da tela ou em uma janela pop-up, dependendo do tamanho e da orientação do dispositivo. Como nos alertas, a UIAlertControlleré usado para criar uma folha de ação. Antes do iOS 8, UIActionSheetera usado, mas agora a documentação diz:

Importante: UIActionSheet foi descontinuado no iOS 8. (Observe que UIActionSheetDelegatetambém está descontinuado.) Para criar e gerenciar folhas de ação no iOS 8 e posterior, use UIAlertControllerum preferredStyledos UIAlertControllerStyleActionSheet.

Vista modal (mostre-me um exemplo)

insira a descrição da imagem aqui

Uma visão modal é uma visão independente que possui tudo o que é necessário para concluir uma tarefa. Pode ou não ocupar a tela cheia. Para criar uma exibição modal, use a UIPresentationControllercom um dos estilos de apresentação modal .

Veja também

Popover (mostre-me um exemplo)

insira a descrição da imagem aqui

Uma popover é uma exibição que aparece quando um usuário toca em algo e desaparece ao tocá-lo. Possui uma seta mostrando o controle ou o local de onde a torneira foi feita. O conteúdo pode ser qualquer coisa que você possa colocar em um View Controller. Você faz uma popover com a UIPopoverPresentationController. (Antes do iOS 8, UIPopoverControllerera o método recomendado.)

No passado, os popovers estavam disponíveis apenas no iPad, mas a partir do iOS 8 você também pode obtê-los em um iPhone (veja aqui , aqui e aqui ).

Veja também

Notificações

insira a descrição da imagem aqui

As notificações são sons / vibrações, alertas / banners ou emblemas que notificam o usuário sobre algo, mesmo quando o aplicativo não está sendo executado em primeiro plano.

insira a descrição da imagem aqui

Veja também

Uma observação sobre o Android Toasts

insira a descrição da imagem aqui

No Android, um Toast é uma mensagem curta exibida na tela por um curto período de tempo e desaparece automaticamente sem interromper a interação do usuário com o aplicativo.

Pessoas provenientes de um plano de fundo Android querem saber qual é a versão para iOS do Toast. Alguns exemplos dessas perguntas podem ser encontrados aqui , aqui , aqui e aqui . A resposta é que não há equivalente a um brinde no iOS . Várias soluções alternativas que foram apresentadas incluem:

  • Faça o seu próprio com uma subclasse UIView
  • Importar um projeto de terceiros que imite um Toast
  • Use um alerta sem botão com um timer

No entanto, meu conselho é seguir as opções de interface do usuário padrão que já vêm com o iOS. Não tente fazer com que seu aplicativo pareça e se comporte exatamente da mesma forma que a versão do Android. Pense em como reembalá-lo para que pareça e pareça um aplicativo iOS.


3
Com uma nota sobre o Android Toast ainda! Agradável! Essas informações ajudam novos desenvolvedores provenientes do desenvolvimento do Android. Obrigado!
Filipe Brito

3
Cara, eu preciso imprimir e enquadrar isso! Você me salvou ontem e hoje novamente: D
finngu 17/17

58

Desde o lançamento do iOS 8, UIAlertViewagora está obsoleto; UIAlertController é a substituição.

Aqui está um exemplo de como fica no 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 você pode ver, a API nos permite implementar retornos de chamada para a ação e quando estamos apresentando o alerta, o que é bastante útil!

Atualizado para o 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 O presentViewController deve ter uma chave de fechamento e qual é a diferença entre seu bloco de conclusão e apenas a conclusão: nulo?
Andrew Plummer

Não faz diferença. Existe um bloco para chamar, será chamado.
Entalpi

25

Atualizado para iOS 8.0

Desde o iOS 8.0, você precisará usar o UIAlertController da seguinte maneira:

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

Onde self no meu exemplo é um UIViewController, que implementa o método "presentViewController" para um pop-up.

David


11

Para Swift 3 e Swift 4:

Como o UIAlertView está obsoleto, existe uma boa maneira de exibir Alert on 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)

Descontinuada :

Esta é a versão rápida inspirada na resposta verificada:

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

Adicione o delegado ao seu controlador de exibição:

class AgendaViewController: UIViewController, UIAlertViewDelegate

Quando o usuário clicar no botão, este código será executado:

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


}

O UIAlertView agora está obsoleto.
precisa saber é o seguinte

7

Embora eu já tenha escrito uma visão geral dos diferentes tipos de pop-ups, a maioria das pessoas só precisa de um alerta.

Como implementar uma caixa de diálogo pop-up

insira a descrição da imagem aqui

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

Minha resposta mais completa está aqui .


0

Aqui está a versão C # no Xamarin.iOS

var alert = new UIAlertView("Title - Hey!", "Message - Hello iOS!", null, "Ok");
alert.Show();
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.