-(id) initWithNome:(NSString *) nome eQuantidadeFuncionarios:(int)
quantidade {
if ((self = [super init])) {
self.nome = nome;
self.quantidadeFuncionarios = quantidade;
}
return self;
}
Para criar uma nova instância:
Empresa *ep = [[Empresa alloc] initWithNome:@"Jujubas LTDA"
eQuantidadeFuncionarios:17];
47
3.17. Melhoria: esconder o teclado automaticamente
Casa do Código
3.17
Melhoria:
esconder o teclado automatica-
mente
Um problema com o nosso aplicativo é que, uma vez que o teclado aparece, ele nunca
mais some, nem mesmo após salvarmos a empresa. Além disso, a imagem de su-
cesso fica escondida. Isso ocorre porque em iOS não existe exatamente o conceito de
foco nos componentes como temos em aplicações tradicionais ou mesmo na Web,
mas sim algo chamado de responder, que são objetos que podem lidar com diversos
tipos de eventos. No caso de componentes como o UITextField que utilizamos
no aplicativo deste capítulo, eles aceitam as mensagens de entrada de texto (que dis-
param o teclado), porém outros componentes como botões (o UIButton no nosso
caso) ignoram tais eventos. Então, o componente que inicialmente pegou o teclado
fica com ele até que outro componente o peça ou, então, que explicitamente recebam
uma mensagem para liberá-lo. E é isso o que faremos.
A cadeia de eventos
Tecnicamente os motivos são um pouco mais densos, e na explicação
desta seção optamos por apresentar de uma forma mais curta e simples
para não sair do foco do capítulo. Para saber mais a respeito, procure por
UIResponder Chain na Internet.
No
método
salvar:
adicione
uma
chamada
ao
método
resignFirstResponder do componente de nome da empresa, conforme o
código abaixo:
1 - (IBAction)salvar:(id)sender {
2
// Libera o teclado
3
[self.nomeField resignFirstResponder];
4
5
// Restante do método
6 }
O código da linha três diz algo como eu me abstenho de responder pelos eventos
por enquanto, fazendo com que o teclado desapareça. Se quiser forçar o teclado a
aparecer, basta usar o método becomeFirstResponder.
48
Casa do Código
Capítulo 3. Mais Objective-C e Xcode
3.18
Melhoria: mostrando a mensagem de sucesso
somente ao salvar
Até o momento a mensagem
Dados salvos com sucesso aparece o tempo todo,
quando na prática deveria aparecer após adicionarmos uma nova empresa, e ainda
assim apenas por alguns momentos. Para solucionar isso primeiro precisamos
escondê-la ao iniciar o aplicativo, e mostrá-la na ação do botão Salvar.
Para a primeira primeira parte, atribua o valor YES à propriedade hidden da
variável avisoSucessoLabel, isso tudo no método viewDidLoad do arquivo
ViewController.m, conforme o código abaixo:
- (void)viewDidLoad {
[super viewDidLoad];
self.avisoSucessoLabel.hidden = YES;
}
Em tempo: todo componente tem a propriedade hidden. Para a segunda parte
mostrar a mensagem por alguns instantes vamos novamente modificar o mé-
todo salvar:. Adicione o código abaixo ao final do método:
1 - (IBAction)salvar:(id)sender {
2
// Código já existente omitido apenas no livro
3
4
self.avisoSucessoLabel.alpha = 0;
5
6
[UIView animateWithDuration:1 animations:^{
7
self.avisoSucessoLabel.hidden = NO;
8
self.avisoSucessoLabel.alpha = 1;
9
} completion:^(BOOL finalizado) {
10
[UIView animateWithDuration:1 delay:2 options:0 animations:^{
11
self.avisoSucessoLabel.alpha = 0;
12
} completion:^(BOOL finalizado) {
13
self.avisoSucessoLabel.hidden = YES;
14
}];
15
}];
16 }
Se você se assustou com este último pedaço de código, não se preocupe: você
não é o único. Objective-C pode ser um tanto amedrontador em certos momentos.
Além disso, o código ficou um pouco maior porque estamos fazendo duas anima-
ções: a primeira para mostrar o aviso, e a segunda para escondê-la novamente após
49
3.18. Melhoria: mostrando a mensagem de sucesso somente ao salvar
Casa do Código
um certo tempo. Mais adiante, no capítulo sobre UIViews mostraremos a fundo
o funcionamento dos blocos de animação, que são um recurso mais avançado da
linguagem.
Criação do bloco de animação
Repare que o bloco de animação criado na última listagem de código
utiliza o caracter circunflexo ( ^) para indicar o início de um pedaço de
código. Em alguns teclados é necessário apertar a tecla que contêm este
símbolo, seguido da barra de espaço.
Rode o aplicativo, insira uma empresa, e você verá a mensagem aparecendo de
maneira animada, e depois de 2 segundos tornando a desaparecer automaticamente.
Você está ficando bom nisso!
50
Capítulo 4
Coordenando o trabalho com
controladores
Diferentes plataformas contêm diferentes maneiras de resolver uma necessidade bas-
tante comum, que é a de gerenciar diversas telas e funcionalidades. Além disso, é
necessário que a navegação e transição entre elas sejam uma tarefa intuitiva para o
usuário e lógica para o desenvolvedor. Em aplicativos iOS isso é feito com o uso de
controladores (controllers), que são classes que como o próprio nome sugere
controlam (ou gerenciam) um conjunto de funcionalidades diretamente relaciona-