Eu criei um UITextField
programaticamente tornando a UITextField
propriedade a do viewController. Preciso dispensar o teclado com o retorno e o toque na tela. Consegui fazer com que o toque na tela fosse dispensado, mas pressionar voltar não está funcionando.
Eu vi como fazer isso com storyboards e alocando e inicializando o UITextField
objeto diretamente sem criá-lo como uma propriedade. Possível fazer?
.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITextFieldDelegate>
@property (strong, atomic) UITextField *username;
@end
.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = [UIColor blueColor];
self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)];
self.username.placeholder = @"Enter your username";
self.username.backgroundColor = [UIColor whiteColor];
self.username.borderStyle = UITextBorderStyleRoundedRect;
if (self.username.placeholder != nil) {
self.username.clearsOnBeginEditing = NO;
}
_username.delegate = self;
[self.view addSubview:self.username];
[_username resignFirstResponder];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"touchesBegan:withEvent:");
[self.view endEditing:YES];
[super touchesBegan:touches withEvent:event];
}
@end
ios
keyboard
uitextfield
noobsmcgoobs
fonte
fonte
Respostas:
A maneira simples é conectar o delegado de
UITextField
a self (self.mytestField.delegate = self
) e dispensar o teclado no métodotextFieldShouldReturn
usando[textField resignFirstResponder];
Outra maneira de dispensar o teclado é a seguinte:
Coloque
[self.view endEditing:YES];
onde deseja descartar o teclado (evento de botão, evento de toque, etc.).fonte
Adicione um método delegado
UITextField
como este:E defina seu e, em
textField.delegate = self;
seguida, adicione também dois métodos delegados deUITextField
fonte
@interface MyController : UIViewController <UITextFieldDelegate>
// Oculte o teclado tocando no fundo na visualização
fonte
simplesmente use isso rapidamente para dispensar o teclado:
Swift 3
fonte
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
SWIFT 4:
ou
Defina o delegado do campo de texto para o viewcontroller atual e:
Objective-C:
ou
Defina o delegado do campo de texto para o viewcontroller atual e:
fonte
No App Delegate, você pode escrever
usar desta forma, você não pode escrever muito código.
fonte
Tente ter uma ideia sobre o que é um socorrista na hierarquia de visualização do iOS. Quando o seu campo de texto se torna ativo (ou primeiro respondente) quando você toca dentro dele (ou passa a mensagem
becomeFirstResponder
programaticamente), ele apresenta o teclado. Portanto, para remover o seu campo de texto de ser o primeiro a responder, você deve passar a mensagemresignFirstResponder
para ele.E para ocultar o teclado em seu botão de retorno, você deve implementar seu método delegado
textFieldShouldReturn:
e passar aresignFirstResponder
mensagem.fonte
Aqui está o que eu uso no meu código. Ele funciona como um encanto!
Em yourviewcontroller.h adicione:
@property (nonatomic) UITapGestureRecognizer *tapRecognizer;
Agora, no arquivo .m, adicione à sua função ViewDidLoad:
Além disso, adicione esta função no arquivo .m:
fonte
Para dispensar um teclado depois que ele foi aberto, existem 2 casos ,
quando o UITextField está dentro de um UIScrollView
quando o UITextField está fora de um UIScrollView
2. quando o UITextField está fora de um UIScrollView, substitua o método em sua subclasse UIViewController
você também deve adicionar delegado para todos os UITextView
para criar um IBAction, pressione ctrl + clique no UITapGesture e arraste-o para o arquivo .h do viewcontroller.
Aqui, chamei tappedEvent como meu nome de ação
as informações fornecidas acima foram obtidas no link a seguir, por favor, consulte para obter mais informações ou entre em contato comigo se você não compreender os dados acima.
http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
fonte
Para um grupo de
UITextView
s dentro deViewController
:Swift 3.0
Objective-C
fonte
Sei que outras pessoas responderam a essa pergunta, mas encontrei outro artigo que também não cobria nenhum evento de segundo plano - tableview ou scrollview.
http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
fonte
Uma vez que as tags dizem apenas iOS, postarei a resposta para Swift 1.2 e iOs 8.4, adicione-os em sua classe do controlador de visualização:
Também não se esqueça de adicionar UITextFieldDelegate na declaração da classe e definir seu delegado de campos de texto para self (a visão).
fonte
IN Swift 3
OU
fonte
Então aqui está o que eu fiz para dispensá-lo após tocar no fundo ou retornar. Tive de adicionar delegate = self em viewDidLoad e também os métodos de delegado posteriormente nos arquivos .m.
fonte
Basta usar isso em Objective-C para dispensar o teclado:
fonte
Primeiro você precisa adicionar delegete textfield no arquivo .h. se não, declare
(BOOL)textFieldShouldReturn:(UITextField *)textField
este método não chamado. então, primeiro adicione o delegado e escreva o código de ocultação do teclado nesse método.tente este..
fonte
Adicionar delegado: UITextFieldDelegate
e, em seguida, adicione este método delegado
// Isso deve funcionar perfeitamente
fonte
quando você usa mais de um campo de texto na tela Com este método você não precisa mencionar o campo de texto todas as vezes como
fonte
Swift 2:
isso é o que é feito para fazer tudo!
feche o teclado com o
Done
botão ouTouch outSide
,Next
para ir para a próxima entrada.Primeiro altere TextFiled
Return Key
paraNext
no StoryBoard.fonte
Se você não conhece o controlador de visualização atual ou visualização de texto, pode usar a cadeia de resposta:
fonte
para swift 3-4 eu consertei como
basta copiar e colar em qualquer lugar da classe. Esta solução só funciona se você quiser que todo o UItextfield funcione da mesma forma, ou se você tiver apenas um!
fonte