nado como ação de um botão na classe OpcoesController. Siga os seguintes
passos:
Abra o arquivo OpcoesController.xib e adicione um botão com o texto
Fechar, e conecte uma action chamada close no arquivo OpcoesController.h
(lembre-se de usar o Assistant Editor para ver o arquivo
.xib e .h lado a
lado). Em seguida, abra o arquivo OpcoesController.m e chame o método
dismissViewControllerAnimated:completion, conforme abaixo:
- (IBAction)close:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
Rode novamente o aplicativo clique no botão Fechar, para que o controlador
seja fechado.
4.3
Navegar por diferentes telas com o UINavigati-
onController
Uma das formas de navegação mais comum em aplicativos iOS é aquela em que, feita
uma determinada ação, uma nova tela desliza da direita para a esquerda por cima da
anterior. Depois, através de um toque em um botão no canto superior esquerdo
(geralmente um botão escrito Back ou Voltar), volta-se para a tela anterior. Ou
seja, é uma navegação hierárquica.
Este tipo de navegação chama-se Controlador de Navegação, ou no termo téc-
nico, UINavigationController. Nos exemplos iremos nos referir a este com-
ponente pelo nome navigation controller, pois é um termo bastante conhecido em
desenvolvimento iOS, e acostumar-se com ele facilitará a busca por informações na
Internet, posteriormente. A figura 4.5 mostra como ele funciona. Ela deve permitir
60
Casa do Código
Capítulo 4. Coordenando o trabalho com controladores
que troquemos de uma tela para outra, de uma funcionalidade para outra, através de
uma interface simples.
Figura 4.5: Funcionamento de um UINavigationController
Navigation controllers são peças muito importantes em aplicações iOS, pois per-
mitem a transição de um controller para outro sem que haja perda de estado. Em
outras palavras, o aplicativo literalmente vai empilhando os controladores, sem tirá-
los da memória, permitindo que a navegação reversa seja feita de maneira natural.
Gerenciamento de memória de controladores
Em condições normais de funcionamento, os controladores que estão
na hierarquia de um Navigation Controller são sempre mantidos em me-
mória. Porém, não devemos trabalhar com a premissa de que isso será
sempre verdade, pois no caso de falta de memória, o iOS pode descar-
regar alguns deles, recriando-os quando necessário.
Para entender melhor o funcionamento do UINavigationController, va-
mos criar um aplicativo de um catálogo de empresas, no qual é possível adicionar
novos registros e realizar configurações.
Crie um novo aplicativo do tipo Single View Application, nos mesmos mol-
des dos exemplos anteriores, e chame-o de NavigationControllerDemo. Você
deverá ter um projeto padrão, com o
AppDelegate e uma classe chamada
61
4.3. Navegar por diferentes telas com o UINavigationController
Casa do Código
ViewController. Repare que este nome, ViewController, que o Xcode cria junto
com o projeto, é apenas para nossa conveniência, porém você não precisa
ficar amar-
rado a ele.
Para começar, vamos mudar o nome da classe ViewController para algo se-
manticamente melhor. Uma das maneiras de fazer isso é renomear manualmente os
arquivos ViewController.m e .h, porém isso dá muito trabalho e corremos o
risco de esquecer alguma coisa. Uma maneira mais inteligente é utilizar a funciona-
lidade de refatoração do Xcode, que faz para nós todo trabalho pesado.
Abra o arquivo ViewController.m e, na linha de definição da classe (onde
tem @implementation ViewController) clique com o botão direito e seleci-
one a opção Refactor -> Rename..., conforme a figura 4.6.
Na caixa de diálogo que abrir, informe o valor RootController no campo de
texto, e deixe marcada a opção Rename related files, para que o Xcode renomeie
todos os arquivos que tenham relação ao original ViewController.
Ao clicar no botão Preview, o Xcode irá mostrar um resumo das operações
que serão realizadas. Clique no botão Save, e caso o Xcode mostre uma mensagem
perguntando se deve fazer backup do conteúdo, clique em Enable.
62
Casa do Código
Capítulo 4. Coordenando o trabalho com controladores
Ao término da operação, repare que tanto os arquivos em disco como
as próprias definições da classe
ViewController foram renomeadas para
RootController.
4.4
Preparar a tela principal
Agora precisamos colocar botões no RootController para chamar os outros con-
troladores, um para a fictícia tela de adicionar empresas ao catálogo, e outro para a
adivinhem também fictícia tela de configurações. O objetivo principal desta
seção é demonstrar como navegar de um lugar para o outro, e não na implementação
real de um catálogo propriamente dito.
Abra o arquivo Main.storyboard e coloque 2 botões, o primeiro como texto
Adicionar, e o segundo com o texto Configurações, conforme mostra a figura 4.6.
63
4.4. Preparar a tela principal
Casa do Código
Figura 4.6: Desenho da tela principal do aplicativo
64
Casa do Código
Capítulo 4. Coordenando o trabalho com controladores