Advertisement
  1. Code
  2. iOS SDK

Fundamentos do iOS: UIAlertView e UIAlertController

Scroll to top
Read Time: 5 min

Portuguese (Português) translation by David Batista (you can also view the original English article)

Mesmo se você acaba de entrar no mundo do desenvolvimento iOS, certamente sabe sobre UIAlertView. A classe UIAlertView tem uma interface simples e é usada para apresentar model alerts.

A Apple tornou o UIAlertView obsoleto através do iOS 8. Com o iOS 8, é recomendado o uso da classe UIAlertController para apresentar action sheets e modal alerts. Nesta dica rápida, eu mostrarei a você como é fácil a transição do UIAlertView para o UIAlertController.

1. Configurando o projeto

Abra o Xcode 6.3+ e crie um novo projeto baseado no template Single View Application.

Choose the Single View Application TemplateChoose the Single View Application TemplateChoose the Single View Application Template

Chame o projeto de Alerts, defina o Language como Swift e atribua iPhone para o Devices. Informe ao Xcode onde deseja salvar os arquivos do seu projeto e clique em Create.

Configure the ProjectConfigure the ProjectConfigure the Project

Comece adicionando um botão para ativar um alert view. Abra o Main.sotryboard e adicione um botão à view da view controller. Defina o titulo do botão como Show Alert e adicione as restrições necessárias para o botão ficar no lugar.

Create a Simple User InterfaceCreate a Simple User InterfaceCreate a Simple User Interface

Abra a ViewController.swift e adiciona uma action à implementação da classe. Deixa a implementação da action vazia por enquanto. Revisite o Main.storyboard e conecte a action showAlert da view controller ao evento Touch Up Inside do botão.

1
@IBAction func showAlert(sender: AnyObject) {
2
    
3
}

2. UIAlertView

Comece exibindo um alert view usando a classe UIAlertView. Como eu mencionei, a interface da classe UIAlertView é muito simples. O sistema operacional cuida dos detalhes básicos. Segue como a implementação atualizada da action showAlert deve ficar.

1
@IBAction func showAlert(sender: AnyObject) {
2
    // Initialize Alert View

3
    let alertView = UIAlertView(title: "Alert", message: "Are you okay?", delegate: self, cancelButtonTitle: "Yes", otherButtonTitles: "No")
4
    
5
    // Configure Alert View

6
    alertView.tag = 1
7
    
8
    // Show Alert View

9
    alertView.show()
10
}

A inicialização é muito simples. Fornecemos um titulo e uma mensagem, passamos um objeto delegado, um titulo para o botão cancelar e os títulos de quaisquer outros botões que gostaríamos de incluir.

O objeto delegado precisa estar em conformidade com o protocolo UIAlertViewDelegate. Como a view controller atuará como o delegado da alert view, a classe ViewController precisa estar em conformidade com o protocolo UIAlertViewDelegate.

1
import UIKit
2
3
class ViewController: UIViewController, UIAlertViewDelegate {
4
    ...
5
}

Os métodos do protocolo UIAlertViewDelegate são definidos como opcionais. O método mais usado frequentemente é o alertView(_:clickedButtonAtIndex:). Este método é chamado quando o usuário toca em um botão do alert view. Assim é como a implementação do método alertView(_:clickedButtonAtIndex:) deve ficar.

1
func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {
2
    if alertView.tag == 1 {
3
        if buttonIndex == 0 {
4
            println("The user is okay.")
5
        } else {
6
            println("The user is not okay.")
7
        }
8
    }
9
}

Compile e rode o aplicativo no simulador iOS e veja se está tudo funcionando como esperado.

3. UIAlertController

A interface da UIAlertController é muito diferente da UIAlertView, mas a motivação da Apple para a transição para a classe UIAlertController faz sentido uma vez que a usarmos algumas vezes. É uma interface elefante e que fará você se sentir familiarizado.

O primeiro beneficio do uso da classe UIAlertController é a falta de protocolo delegado para manipular as interações. Isso significa que precisamos apenas atualizar a implementação da action showAlert. Dê uma olhada na implementação atualizada a seguir.

1
@IBAction func showAlert(sender: AnyObject) {
2
    // Initialize Alert Controller

3
    let alertController = UIAlertController(title: "Alert", message: "Are you okay?", preferredStyle: .Alert)
4
    
5
    // Initialize Actions

6
    let yesAction = UIAlertAction(title: "Yes", style: .Default) { (action) -> Void in
7
        println("The user is okay.")
8
    }
9
    
10
    let noAction = UIAlertAction(title: "No", style: .Default) { (action) -> Void in
11
        println("The user is not okay.")
12
    }
13
    
14
    // Add Actions

15
    alertController.addAction(yesAction)
16
    alertController.addAction(noAction)
17
    
18
    // Present Alert Controller

19
    self.presentViewController(alertController, animated: true, completion: nil)
20
}

A inicialização é muito simples. Passamos um titulo, uma mensagem e, mais importante, definimos a preferência de estilo para UIAlertControllerStyle.Alert ou .Alert para simplificar. A preferência de estilo diz ao sistema operacional se o alert controller precisa ser apresentado como uma action sheet, .ActionSheet, ou um modal alert, .Alert.

Ao invés de fornecer títulos para os botões e manipulação para interações através do protocolo UIAlertViewDelegate, adicionamos ações ao alert controller. Toda ação é uma instância da classe UIAlertAction. Criar um UIAlertAction é simples. O inicializador recebe um titulo, um estilo e um manipulador. O argumento estilo é do tipo UIAlertActionStyle. O manipulador é uma closure, recebendo o objeto UIAlertAction como seu único argumento.

O uso de manipuladores ao invés de um protocolo delegado torna a implementação de uma modal alert mais elegante e fácil de entender. Não há mais necessidade de etiquetar as alert views se você estiver trabalhando com várias modal alerts.

Antes de apresentarmos o alert controller ao usuário, adicionamos as duas ações chamando o addAction(_:) no objeto alertController. Perceba que a ordem dos botões na modal alert é determinanda pela ordem em que as ações são adicionadas ao alert controller.

Como a classe UIAlertController é uma subclasse UIViewController, apresentar o alert controller é feito simplesmente chamando o presentViewController(_:animated:completion:), passando o alert controller como o primeiro argumento.

4. UIActionSheet

Não é novidade que a Apple também tornou obsoleto a classe UIActionSheet e o protocolo UIActionSheetDelegate. Com o iOS 8, é recomendando o uso da classe UIAlertController para apresentar uma action sheet.

Apresentar um action sheet é idêntico a apresentar um model alert. A unica diferença é a propriedade preferredStyle da alert controller, que precisar ser definida como UIAlertControllerStyle.ActionSheet, ou .ActionSheet para abreviar, para action sheets.

Conclusão

Mesmo a UIAlertView e a UIActionSheet se tornando obsoletas no iOS 8, você pode continuar usando elas por um futuro previsível. A interface da classe UIAlertController, entretante, é uma melhoria definitiva. Ela adiciona simplicidade e unifica a API para apresentar model alerts e action sheets. E como o UIAlertController é uma subclasse UIViewController, a API lhe parecerá familiar.

Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no Twitter!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.