09 Dez, 2014 12:41

Formulários no iOS - parte 4

A propriedade inputView

É muito comum seu formulário não exigir apenas entradas de texto simples, mas também preenchimento de data, hora, escolha em uma lista de opções ou até mesmo precisar de um meio de entrada totalmente customizado.

A primeira opção seria colocar todos os componentes de entrada direto no formulário, todos visíveis ao mesmo tempo, mas isso poderia deixar a interface muito poluída e também poderia dificultar o fluxo de navegação entre os campos onde o usuário teria de alternar entre campos de texto e componentes que não usam o teclado.

Mas existe uma solução muito mais elegante para a maioria dos casos: inputView.

A propriedade inputView está presente tanto em UITextField quanto em UITextView e basicamente o que ele faz é substituir o teclado padrão do iOS por qualquer outra UIView. Isso mesmo: qualquer UIView!

Com isso, você pode substituir o teclado por qualquer mecanismo de entrada que quiser como UIPickerView, UIDatePicker ou algo totalmente customizado. Vamos a um exemplo:

- (void)viewDidLoad {
    [super viewDidLoad];

    /* ... outras configurações do formulário ... */

    //Substituindo o teclado por uma UIPickerView no campo de DDD
    UIPickerView *dddPickerView = [[UIPickerView alloc] init];
    dddPickerView.backgroundColor = [UIColor whiteColor];
    dddPickerView.dataSource = self;
    dddPickerView.delegate = self;
    self.dddTextField.inputView = dddPickerView;
}

No código acima, eu informei ao dddTextField que sua inputView é uma UIPickerView chamada dddPickerView. Não pretendo entrar em detalhes quanto a implementação do dataSource e delegate para popular um UIPickerView, mas o método mais interessante é o exemplo abaixo:

#pragma mark - UIPickerViewDelegate

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    self.emEdicaoTextInput.text = [self pickerView:pickerView titleForRow:row forComponent:component];
}

Apesar do inputView substituir o teclado, ele não cria um meio automático para preencher o valor do UITextField. É seu papel guardar qual campo está sendo editado e garantir que as mudanças no componente de edição sejam refletidas no valor do campo. No exemplo acima, o campo em edição está armazenado na variável UIView<UITextInpu>> * emEdicaoTextInput (veja como usá-la no segundo post da série). Implementando o UIPickerViewDelegate, sou avisado quando o usuário escolhe um valor e posso copiá-lo para o meu campo em edição.

Usando inputView no seu formulário iOS

E é apenas isso! Poucas linhas de código para um grande bônus no seu formulário. E, como já disse, você pode usar virtualmente qualquer UIView para substituir o teclado de um campo. Poderia fazer até seu próprio teclado com vários UIButton dentro de uma UIView.

E com essa dica, encerro a série de posts sobre formulários no iOS. Espero que tenham sido úteis para você.

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.