Como tô mexendo muito com iOS ultimamente vou registrar aqui algumas pequenas dicas no desenvolvimento de aplicações para iOS.
Dica 1 - Adicionando botões na navigation bar dinâmicamente
UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithTitle:@"Salvar" style:UIBarButtonItemStyleDone target:self action:@selector(salvarDados)]; [self.navigationItem setRightBarButtonItem:saveButton];
Dica 2 - Ocultando o teclado virtual
O teclado virtual do iOS é exibido automaticamente quando você clica em uma caixa de texto (UITextFiedl), se tornando o "primeiro a responder" (firstResponder) a eventos de toque. Entretanto para fechá-la você vai codificar um pouquinho. Digamos que em uma tela você tenha 3 caixas de texto. Quando o usuário estiver na primeira caixa de texto ele terá a opção de pular para o próximo campo clicando no botão Next no teclado virtual. Para habilitar esse botão altere a propriedade Return Button do TextField para Next. Faça o mesmo no segundo (e nos outros que você precisar). No último coloque Done na mesma propriedade.
Agora ligue o evento Did End On Exit de todas as caixas de texto para o método abaixo.
- (IBAction)hideKeyboard:(id)sender {
if ([sender isEqual:edtName] == YES){
[edtAddress becomeFirstResponder];
} else if ([sender isEqual:edtAddress] == YES){
[edtPhone becomeFirstResponder];
} else {
[edtName resignFirstResponder];
[edtAddress resignFirstResponder];
[edtPhone resignFirstResponder];
}
}
Isso resolve o problema da navegação. Mas uma coisa comum é, ao clicarmos fora da caixa de texto, o teclado desaparecer. Para fazer isso, clique na View da tela e mude seu tipo de classe de UIView para UIControl. Depois associe o evento Touch Up Inside para o método acima.O parâmetro sender identifica qual componente disparou o evento. Se não foi nenhum dos dois primeiros TextFields ocultamos o teclado chamando o método resignFirstResponder (o TextField agora é o "primeiro respondedor"). Pronto! Agora ao clicar em qualquer área da tela, o teclado desaparecerá.
Dica 3 - Editando células da UITableView
Quando precisamos, em algum tipo de listagem, excluir um registro, podemos recorrer a um recurso bacana do iOS: deslizar sobre célula. Quando isso acontece o método tableView:editingStyleForRowAtIndexPath é chamado. Aqui podemos retornar um estilo de edição para a célula: UITableViewCellEditingStyleDelete ou UITableViewCellEditingStyleInsert.
-(UITableViewCellEditingStyle)tableView:
(UITableView *)tableView
editingStyleForRowAtIndexPath:
(NSIndexPath *)indexPath{
return UITableViewCellEditingStyleDelete;
}
Quando deslizar o dedo para a direita sobre a célula, aparecerá ao botão Delete na célula. Para tratar o evento desse botão devemos implementa o método abaixo:
-(void)tableView:(UITableView *)tableView
didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath {
}
Uma outra opção é colocar utilizar o código abaixo ao clicar em um UIBarButton.
-(void)habilitarExcluir:(id)sender {
[self.tableView setEditing:
!self.tableView.editing animated:YES];
}
E realizar o código da exclusão no método abaixo:
- (void)tableView:(UITableView *)tableView
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle ==
UITableViewCellEditingStyleDelete) {
}
}
Dica 4 - Abrindo uma URL no Browser
O código abaixo também aplica-se a telefone (tel:88990099) e mapas...
NSURL *url = [NSURL URLWithString: @"http://nglauber.blogspot.com"]; [[UIApplication sharedApplication] openURL:url];
Dica 5 - iPhone ou iPad?
Em uma aplicação Universal (que roda em iPhone e iPad) para checar se o device é um iPhone (ou iPod) ou iPad utilizamos o código abaixo:
if ([[UIDevice currentDevice] userInterfaceIdiom] ==
UIUserInterfaceIdiomPhone) {
//iPhone ou iPod
} else {
// iPad
}
Dica 6 - Salvando Objetos com NSUserDefaults
Para salvar um objeto todo no NSUserDefaults você deve implementar os métodos que vão serializar e deserializar os dados...
// NSPessoa.h -------------------------------- #import@interface NSPessoa : NSObject @property (nonatomic, strong) NSString *nome; @property (nonatomic, strong) NSString *email; @end // NSPessoa.m -------------------------------- #import "NSPessoa.h" @implementation NSPessoa @synthesize nome, email; - (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeObject:self.nome forKey:@"nome"]; [encoder encodeObject:self.email forKey:@"email"]; } - (id)initWithCoder:(NSCoder *)decoder { if((self = [super init])) { self.nome = [decoder decodeObjectForKey:@"nome"]; self.email = [decoder decodeObjectForKey:@"email"]; } return self; } @end
Abaixo o código para carregar e salvar os dados.
// Carregando ----------------------------------
NSUserDefaults *prefs =
[NSUserDefaults standardUserDefaults];
NSData *data = [prefs objectForKey:@"pessoa"];
NSPessoa *pessoa = (NSPessoa *)
[NSKeyedUnarchiver unarchiveObjectWithData: data];
// se os dados da pessoa não existirem,
// inicia um novo objeto
if (!pessoa){
pessoa = [NSPessoa new];
}
// Salvando ------------------------------------
NSData *data = [NSKeyedArchiver
archivedDataWithRootObject:pessoa];
NSUserDefaults *defaults =
[NSUserDefaults standardUserDefaults];
[defaults setObject:data forKey:@"pessoa"];
Qualquer dúvida, deixem seus comentários.
4br4ç05,
nglauber






