Dispensar o teclado do iphone

Eu estou tentando recriar algo semelhante ao teclado pop-up usado no safari.

texto alternativo

Eu sou capaz de reproduzi-lo visualmente, colocando uma barra de ferramentas sobre a minha visão e os botões apropriados, no entanto eu não consigo descobrir qualquer maneira de dispensar o teclado uma vez que o usuário tenha tocado o botão feito.

Você tentou:

[viewReceivingKeys resignFirstResponder]; 

Onde viewReceivingKeys é o UIView que está recebendo a input de texto?

Há algumas coisas que você precisa lembrar. O número 1 dos desenvolvedores da parte que se esquecem de definir é o delegado do textField.

Se você estiver usando o Interface Builder, deve lembrar que precisa definir o delegado do textField para o arquivo Owner.

Se você não estiver usando o Interface Builder, certifique-se de definir o delegado do campo de texto como self. Eu também incluo o returnType. Por exemplo, se o textField foi chamado gameField:

 gameField.delegate = self; gameField.returnKeyType = UIReturnKeyDone; 

Você também deve implementar o UITextFieldDelegate para o seu ViewController.

 @interface YourViewController : UIViewController  

Finalmente, você precisa usar o método textFieldShouldReturn e chamar [textField resignFirstResponder]

  -(BOOL) textFieldShouldReturn:(UITextField*) textField { [textField resignFirstResponder]; return YES; } 

Todos os seus textFields usarão esse mesmo método, então você só precisa ter essa configuração uma vez. Enquanto o delegado estiver definido para o textField, o UITextFieldDelegate será implementado para a interface, você adicionará o método textFieldShouldReturn e chamará o resignFirstResponder de seu conjunto.

Se você construir suas próprias exibições no Interface Builder, defina seu controlador de exibição como delegado para o campo de texto e implemente textFieldShouldReturn: de UITextFieldDelegate no controlador de visualizações.

 - (BOOL)textFieldShouldReturn:(UITextField *)theTextField { NSLog(@"%@ textFieldShouldReturn", [self class]); [theTextField resignFirstResponder]; // do stuff with the text NSLog(@"text = %@", [theTextField text]); return YES; } 

UITextFieldDelegate textFieldShouldReturn: nos documentos do iphone cocoa

Se você está falando sobre como dispensar o teclado de um UITextField vez de um UITextView . Sua pergunta não é tão clara? Se você estiver, então, certifique-se de que sua class esteja marcada como um UITextFieldDelegate no arquivo de interface,

 @interface MyController: UIViewController  { UITextField *activeTextField; // ...remainder of code not show ... } 

e então você deve implementar os dois methods delegates como abaixo,

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { activeTextField = textField;! return YES; } - (BOOL)textFieldShouldReturn:(UITextField *)textField { activeTextField = nil; [textField resignFirstResponder]; return YES; } 

No entanto, se você estiver usando um UITextView , as coisas serão um pouco mais complicadas. O protocolo UITextViewDelegate não possui o equivalente ao método textFieldShouldReturn: presumivelmente, pois não devemos esperar que a tecla Return seja um sinal de que o usuário deseja parar de editar o texto em um diálogo de input de texto com várias linhas (afinal, o usuário pode deseja inserir quebras de linha pressionando Return).

No entanto, existem várias maneiras de incapacitar o UITextView se demitir como primeiro socorrista usando o teclado. O método usual é colocar um botão Done na barra de navegação quando o UITextView apresenta o teclado pop-up. Quando tocado, este botão pede que a textview seja renunciada como primeiro socorrista, que então dispensará o teclado.

No entanto, dependendo de como você planejou sua interface, talvez você queira que o UITextView renuncie quando o usuário tocar fora do próprio UITextView . Para fazer isso, você subclassificará o UIView para aceitar toques e instruirá a exibição de texto a se demitir quando o usuário tocar fora da própria visão.

Crie uma nova turma

 #import  @interface CustomView : UIView { IBOutlet UITextView *textView; } @end 

Em seguida, na implementação, implemente o touchesEnded:withEvent: e peça ao UITextView para renunciar como primeiro respondedor.

 #import "CustomView.h" @implementation CustomView - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { // Initialization code } return self; } - (void) awakeFromNib { self.multipleTouchEnabled = YES; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"touches began count %d, %@", [touches count], touches); [textView resignFirstResponder]; [self.nextResponder touchesEnded:touches withEvent:event]; } @end 

Depois de adicionar a turma, você precisa salvar todas as alterações, entrar no Interface Builder e clicar em sua visualização. Abra o Identity Inspector no utilitário pabel e altere o tipo de visualização em seu arquivo de ponta para ser seu CustomView em vez da class UIView padrão. Em seguida, no Connections Inspector, arraste a saída textView para o UITextView . Depois de fazer isso, e depois de recriar seu aplicativo, os toques fora dos elementos da interface do usuário ativa agora descartarão o teclado. Note, entretanto, que se o UIView você está subclassificando estiver “atrás” de outros elementos da interface do usuário, esses elementos interceptarão os toques antes de atingirem a camada do UIView. Portanto, embora essa solução seja elegante, ela pode ser usada apenas em algumas situações. Em muitos casos, você terá que recorrer ao método de força bruta de adicionar um botão Concluído à barra de navegação para dispensar o teclado.

usar um controlador de navegação e pop a visão quando terminar?

Por exemplo, eu uso um código como este para inserir uma checkbox sobre:

 [[self navigationController] presentModalViewController:modalViewController animated:YES]; 

e então quando o botão na checkbox sobre é clicado, eu uso isso para me livrar dele:

 [self.navigationController dismissModalViewControllerAnimated:YES]; 

No meu caso, a checkbox sobre ocupa a canvas inteira, mas não acho que seria necessário que isso funcionasse.

edit: Acho que posso ter entendido mal sua pergunta. Algo ao longo das linhas do meu código seria se você está fingindo toda a visualização do teclado. Acho que o primeiro socorrista de resignação é o caminho certo para fazê-lo se for o teclado normal com a barra de ferramentas adicionada no topo.