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.



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.



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.



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!