Archive for julho, 2009

Manipulando componentes - Parte Final

domingo, julho 26th, 2009

Modifique a opção Capitalize para Words. Isto fará com que todo primeiro caracter digitado seja maiúsculo. Depois modifique o Return Key para Done. Isto modificará a tecla de retorno do teclado.

figura8

Após fazermos estas modificações precisamos delegar o controle deste componente para a classe RootViewController, e por que? Porque foi lá que inserimos o código que irá tratar o recebimento das informações digitadas pelo usuário. Desta forma, pressionando a tecla control, de um click em cima do componente textbox, com isso irá aparecer a janela de propriedades. Dê um click no círculo que está a direita da opção Delegate e arraste até a classe RootViewController e solte.

figura9

Pronto fizemos a correção do nosso código. Rode novamente a aplicação e observe e teste as modificações feitas. Estamos praticamente encerrando os conceitos básicos do nosso treinamento. Recomendo montar outro projeto e iniciar novamente para consolidar o conhecimento aprendido.

Criando novas Views

Agora vamos aprender como incluir novas views na nossa aplicação. Vamos  abrir o IB, e na janela Library vamos selecionar a pasta Windows, Views e Bars. Quando selecionar esta pasta, no painel abaixo vai aparecer alguns componentes, click em cima do componente View e arraste até a janela MainWindow.xib.

Neste momento acabamos de criar uma nova view, vamos dar um nome para ela. De um click em cima da nova view, e no Inspector de um click no ícone Information (ícone “i” em azul). No campo Name digite viewOptions.

figura10

Vamos ajustar também o tamanho desta view. Ainda no Inspector vá até View Size (ícone da régua amarela) e modifique o H para 480. Fizemos algo parecido para ajustar os tamanhos da Main e Flipside. Toda vez que criamos uma nova view, o IB  usa dimensão 320×460 como default, porque ele não sabe se você irá ocultar a barra de status, desta forma ele assume que a barra de status estará visível.

Na próxima edição vamos aprender como manipular estas views. Vamos usar também novos componentes. Estamos terminando a parte básica deste aprendizado, logo iremos mexer com componentes mais interessantes e que fazem a diferença no iPhone, tais como GPS, Acelerômetro e Tabelas.

(Matéria publicada na revista MAC+)

(by Ademar Varela)

Manipulando Componentes - Parte III

quinta-feira, julho 16th, 2009

Repare que embora tenhamos tirado a barra de status da nossa aplicação, ainda aparece a barra de status na view (deve estar com fundo preto). Isto ocorre porque tiramos a barra “programaticamente” mas não tiramos do gráfico. Por isto quando a aplicação tenta carregar esta view no momento da execução ela tira a barra, mas como a barra tem o tamanho de 20 pixels ela desloca a tela e deixa uma falha no rodapé. Antes de tirarmos a barra, vamos dar uma olhada no Inspector da view Flip Side. De um click no ícone da régua (é o ícone amarelo). Observe as dimensões da view, devem estar W:320 e H:460. Repare que não é possível modificar estas dimensões neste momento. Agora de um click no primeiro ícone do Inspector, que tem o formato de uma seta apontando para baixo (ícone azul). Observe o campo Status Bar, ele deve estar setado para Black, edite este campo e troque para None. Depois disso, volte para o ícone da régua, e você irá perceber que agora é possível modificar as dimensões da view. Modifique o H de 460 para 480. Este número não é mágico. As dimensões de uma tela no iPhone é 320×480.

figura5

Faça o mesmo procedimento na view MainView.xib. A diferença é que com ele a barra de status estará como Gray. Os passos são os mesmos para corrigir as suas dimensões. Execute a aplicação após estas modificações e você verá que o deslocamento do rodapé não ocorre mais.

figura6

Manipulando o textbox

Por fim, vamos corrigir o problema do componente textbox. Observe que após a digitação, a aplicação não recolhe o teclado e também não altera o conteúdo do componente label. Isto está acontecendo porque a aplicação não está preparada para tratar o recebimento das informações digitadas pelo usuário.

Para tratarmos o evento do teclado vamos inserir o seguinte código na RootViewController.m

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {

textField.enabled = FALSE;

labelSTR.text = textField.text;

return YES;

}

Basicamente este código fará com que o teclado seja recolhido com o comando textField.enabled = FALSE, e vai atribuir o conteúdo do componente textbox para o componente label com o comando labelSTR.text = textField.text. Só isto não basta, agora precisamos ajustar o componente no modo gráfico. De um duplo click no arquivo MainWindow.xib. Com o IB aberto de um click em cima do componente textbox, e observe o Inspector. Nos atributos (ícone azul), você verá todas os atributos que podem ser modificados no componente textbox. Vamos mudar alguns para entendermos melhor o funcionamento deste componente.

(Matéria publicada na revista MAC+)
(by Ademar Varela)

Manipulando Componentes - Parte II

segunda-feira, julho 13th, 2009

Reparem que os elementos inseridos são os mesmos declarados anteriormente, o componente de texto, de label e de botão. Execute a aplicação e você já não vai perder os componentes quando retornar da tela de informações.

Tamanho de View

Outro problema que encontramos é com relação ao tamanho da view, vocês devem ter reparado que existe uma falha no rodapé, tanto da Main como da FlipSide, isto está ocorrendo porque tiramos a barra de status, lembram?

figura3

Para corrigir este problema, vamos retornar para o IB. Primeiramente, de um duplo click em cima do arquivo FlipsideView.xib e abra a view Flip Side com outro duplo click.

figura4

(Matéria publicada na revista MAC+)
(by Ademar Varela)

Manipulando Componentes - Parte I

quarta-feira, julho 1st, 2009

Na última publicação contruimos uma aplicação simples, mas com algumas deficiências, vamos corrigir algumas hoje. Se vocês fizeram todos os passos devem ter percebido que quando retornamos da tela de informações, perdemos os componentes da tela principal, no caso da MainView.

Por que isto acontece?

Isto ocorre porque na prática não incluímos estes componentes “programaticamente” pois usamos o IB para isso. É necessário incluir estes componentes no código também, para quando ocorrer um retorno para view em questão os mesmos sejam disponibilizados. Para fazer isto vamos voltar para o código. Bom para fazermos isso da maneira correta, vamos entender que primeiro aonde colocar. Reparem no código abaixo:

- (IBAction)toggleView {

if (flipsideViewController == nil) {

[self loadFlipsideViewController];

}

UIView *mainView = mainViewController.view;

UIView *flipsideView = flipsideViewController.view;

[UIView beginAnimations:nil context:NULL];

[UIView setAnimationDuration:1];

[UIView setAnimationTransition:([mainView superview] ? UIViewAnimationTransitionFlipFromRight : UIViewAnimationTransitionFlipFromLeft) forView:self.view cache:YES];

if ([mainView superview] != nil) {

[flipsideViewController viewWillAppear:YES];

[mainViewController viewWillDisappear:YES];

[mainView removeFromSuperview];

[infoButton removeFromSuperview];

[self.view addSubview:flipsideView];

[self.view insertSubview:flipsideNavigationBar aboveSubview:flipsideView];

[mainViewController viewDidDisappear:YES];

[flipsideViewController viewDidAppear:YES];

} else {

[mainViewController viewWillAppear:YES];

[flipsideViewController viewWillDisappear:YES];

[flipsideView removeFromSuperview];

[flipsideNavigationBar removeFromSuperview];

[self.view addSubview:mainView];

[self.view insertSubview:infoButton aboveSubview:mainViewController.view];

[flipsideViewController viewDidDisappear:YES];

[mainViewController viewDidAppear:YES];

}

[UIView commitAnimations];

Este código é o método toggleView da classe RootViewController. Este método como já foi dito antes, faz a transição das views Main e FlipSide. Para não perdemos os componentes criados no IB quando retornamos, precisamos incluir estes componentes no momento que a view Main é carregada, para corrigir modifique o código desta forma:

- (IBAction)toggleView {

if (flipsideViewController == nil) {

[self loadFlipsideViewController];

}

UIView *mainView = mainViewController.view;

UIView *flipsideView = flipsideViewController.view;

[UIView beginAnimations:nil context:NULL];

[UIView setAnimationDuration:1];

[UIView setAnimationTransition:([mainView superview] ? UIViewAnimationTransitionFlipFromRight : UIViewAnimationTransitionFlipFromLeft) forView:self.view cache:YES];

if ([mainView superview] != nil) {

[flipsideViewController viewWillAppear:YES];

[mainViewController viewWillDisappear:YES];

[mainView removeFromSuperview];

[infoButton removeFromSuperview];

[self.view addSubview:flipsideView];

[self.view insertSubview:flipsideNavigationBar aboveSubview:flipsideView];

[mainViewController viewDidDisappear:YES];

[flipsideViewController viewDidAppear:YES];

} else {

[mainViewController viewWillAppear:YES];

[flipsideViewController viewWillDisappear:YES];

[flipsideView removeFromSuperview];

[flipsideNavigationBar removeFromSuperview];

[self.view addSubview:mainView];

[self.view insertSubview:infoButton aboveSubview:mainViewController.view];

//-Inicio da modificação

[self.view insertSubview:textField aboveSubview:mainViewController.view];

[self.view insertSubview:labelSTR aboveSubview:mainViewController.view];

[self.view insertSubview:button aboveSubview:mainViewController.view];

//-Fim da modificação

[flipsideViewController viewDidDisappear:YES];

[mainViewController viewDidAppear:YES];

}

[UIView commitAnimations];

(Matéria publicada na revista MAC+)

(by Ademar Varela)