Pergunta

eu tenho um agrupado UITableViewController com uma seção e muitas linhas.Cada cell consiste em dois elementos:a UILabel com uma descrição e um UITextField para uma entrada.Uma forma, eu diria.

Na parte inferior há um botão "Avançar" para ir para a próxima visualização.Mas antes disso, eu valido o UITextFieldde:caso o usuário não tenha preenchido algum campo, este campo deverá receber o foco, para que o usuário veja que precisa inserir algo.Eu tentei com isso:

[inputField becomeFirstResponder];

Lembre-se, o botão que apertei é no fundo do meu ponto de vista e imagino que o UITextField é no topo.Nessa situação o campo não consegue o foco porque está muito distante.Agora, quando eu rolar para cima lentamente e o campo ficar visível, o campo se tornará o primeiro respondente e receberá o cursor :-) Conclusão:O becomeFirstResponder funcionou, mas não faz exatamente o que eu queria.Não quero rolar para cima com o dedo, o campo deve ficar em foco e ficar visível automaticamente.

Existe alguma maneira de "pular" diretamente para o meu campo?Use uma alternativa para becomeFirstResponder?Rolar para meu campo automaticamente?

Obrigado pela ajuda!

Foi útil?

Solução

Se você conhece o índice da célula com o UITextField que deseja editar, use



NSIndexPath* indexPath = [[NSIndexPath indexPathWithIndex:your_section_index] indexPathByAddingIndex:your_cell_index];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]

antes de ligar becomeFirstResponder.

Se o celular estiver fora da tela, o BecomeFirstResponder pode falhar em algumas versões do iOS.Além disso, algumas versões realizarão rolagem adicional na tableview em algumas situações (por exemplo,se o código da Apple determinar que o respondedor ainda estaria fora da tela sem rolar mais).Para contornar esses problemas, pode ser necessário ligar para o socorrista após a conclusão da animação de rolagem.

Outras dicas

Eu tive o mesmo problema. é devido ao UIAnimation ocorrer para as duas tarefas simultaneamente.Portanto, embora o UIAnimation para scrollToRowAtIndexPath ignore o BecomeFirstResponder .

A solução pode ser desative o efeito de animação um deles OU senão usando o performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:1.0f];.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top