09 Out, 2014 10:42

Formulários no iOS - parte 3

Barra de navegação

Vamos fazer uma barra de navegação semelhante a do Safari quando exibe algum formulário. Essa barra tem três ações possíveis: "Mover para o campo anterior", "Mover para o campo seguinte", "Fechar o teclado".

Defina uma UIToolBar com três botões, "Anterior", "Seguinte" e "OK". Você pode criá-la via código ou XIB e customizar sua aparência como preferir. Eis um exemplo de um XIB:

Exemplo de UIToolBar

Associe à uma propriedade toolBar do seu controller. Para que a toolBar seja colocada sobre o teclado, o procedimento é muito simples: basta atribuir a toolBar à propriedade inputAccessoryView de cada UITextField e UITextView do seu formulário. Ex:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.nomeTextField.inputAccessoryView = self.toolBar;
    self.emailTextField.inputAccessoryView = self.toolBar;
    self.siteTextField.inputAccessoryView = self.toolBar;
    self.dddTextField.inputAccessoryView = self.toolBar;
    self.telefoneTextField.inputAccessoryView = self.toolBar;
    self.mensagemTextView.inputAccessoryView = self.toolBar;

}

Com isso, já temos a toolBar posicionada automaticamente sobre o teclado quando os campos do formulário estiverem selecionados. Se você implementou o código do post anterior, então a toolBar será levada em conta na hora de redimensionar o formulário sem necessidade de qualquer código adicional.

UIToolBar em uso no formulário

Falta apenas definir as ações dos botões presentes na toolBar. Associe as ações abaixo aos botões "Anterior", "Seguinte" e "OK" respectivamente.

- (IBAction)solicitouAnterior:(id)sender {
    UIView *anteriorView = [self.emEdicaoTextInput.superview viewWithTag:self.emEdicaoTextInput.tag-1];
    if ([anteriorView isKindOfClass:[UITextField class]] || [anteriorView isKindOfClass:[UITextView class]]) {
        [anteriorView becomeFirstResponder];
    }
    else {
        [self.emEdicaoTextInput resignFirstResponder];
    }
}

- (IBAction)solicitouSeguinte:(id)sender {
    UIView *seguinteView = [self.emEdicaoTextInput.superview viewWithTag:self.emEdicaoTextInput.tag+1];
    if ([seguinteView isKindOfClass:[UITextField class]] || [seguinteView isKindOfClass:[UITextView class]]) {
        [seguinteView becomeFirstResponder];
    }
    else {
        [self.emEdicaoTextInput resignFirstResponder];
    }
}

- (IBAction)solicitouFecharTeclado:(id)sender {
    [self.emEdicaoTextInput resignFirstResponder];
}

Basicamente, para os botões "Anterior" e "Seguinte" funcionarem, você precisa de uma forma de definir a ordem dos campos do formulário de modo que você consiga "perguntar" qual o campo anterior e o seguinte em relação o "emEdicaoTextInput". Você poderia, p. ex., varrer as subviews ou colocar todos os campos num array. Neste exemplo, eu assumi que cada campo tem uma tag e que as tags estão na mesma ordem dos campos.

O botão "OK" apenas encerra a edição do campo atual, fechando o teclado.

No próximo post, vou ensinar como substituir o teclado por outras views como a UIPickerView, p. ex. Fique ligado.

Ao navegar neste site, você consente o uso de cookies nossos e de terceiros, que coletam informações anônimas e são essenciais para melhorar sua experiência em nosso site.