Как отменить клавиатуру IOS программно
Я создал UITextField
программно, создав свойство UITextField
a свойства viewController. Мне нужно убрать клавиатуру с возвратом и прикосновением к экрану. Мне удалось отключить экран, но нажатие на возврат не работает.
Я видел, как это сделать с помощью раскадровки и путем выделения и инициализации объекта UITextField
напрямую, не создавая его как свойство. Можно сделать? Я ноб - извините!
.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
Ответы
Ответ 1
Простым способом является подключение делегата UITextField
к self (self.mytestField.delegate = self
) и отмена клавиатуры в методе textFieldShouldReturn
с помощью [textField resignFirstResponder];
Еще один способ убрать клавиатуру:
[self.view endEditing:YES];
Поместите [self.view endEditing:YES];
, где вы хотите отменить клавиатуру (событие Button, событие Touch и т.д.).
Ответ 2
Добавьте метод делегата UITextField
следующим образом:
@interface MyController : UIViewController <UITextFieldDelegate>
И установите textField.delegate = self;
, затем добавьте два метода делегата UITextField
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return YES;
}
// It is important for you to hide the keyboard
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
Ответ 3
//Скрыть клавиатуру, коснувшись фонового изображения
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[[self view] endEditing:YES];
}
Ответ 4
просто используйте это в быстрой расстановке клавиатуры:
UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)
Swift 3
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
Ответ 5
Попытайтесь получить представление о том, что первый ответчик находится в иерархии представлений iOS. Когда ваше текстовое поле становится активным (или первым ответчиком), когда вы коснетесь его (или передаете его в стиле messasge becomeFirstResponder
программно), он представляет клавиатуру. Поэтому, чтобы удалить текстовое поле из первого ответчика, вы должны передать ему сообщение resignFirstResponder
.
[textField resignFirstResponder];
И чтобы скрыть клавиатуру на кнопке возврата, вы должны реализовать свой метод делегирования textFieldShouldReturn:
и передать сообщение resignFirstResponder
.
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return YES;
}
Ответ 6
Вот что я использую в своем коде. Он работает как шарм!
В yourviewcontroller.h добавьте:
@property (nonatomic) UITapGestureRecognizer *tapRecognizer;
Теперь в файле .m добавьте это в свою функцию ViewDidLoad:
- (void)viewDidLoad {
[super viewDidLoad];
//Keyboard stuff
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
tapRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tapRecognizer];
}
Кроме того, добавьте эту функцию в файл .m:
- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
[self.view endEditing:YES];
}
Ответ 7
В делегате приложения вы можете написать
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.window endEditing:YES];
}
используйте этот способ, вы можете не писать слишком много кода.
Ответ 8
Для группы UITextView
внутри a ViewController
:
Swift 3.0
for view in view.subviews {
if view is UITextField {
view.resignFirstResponder()
}
}
Objective-C
// hide keyboard before dismiss
for (UIView *view in [self.view subviews]) {
if ([view isKindOfClass:[UITextField class]]) {
// no need to cast
[view resignFirstResponder];
}
}
Ответ 9
Чтобы закрыть клавиатуру после появления клавиатуры, есть 2 случая,
2. Когда UITextField находится вне UIScrollView
переопределить метод в вашем подклассе UIViewController
вы также должны добавить делегат для всех UITextView
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
- В представлении прокрутки нажатие на внешнюю сторону не будет запускать какое-либо событие, поэтому в этом случае используйте указатель дескриптора жесткости,
Перетащите UITapGesture для прокрутки и создайте для него IBAction.
чтобы создать IBAction, нажмите ctrl + щелкнуть UITapGesture и перетащить его в .h файл viewcontroller.
Здесь я назвал tappedEvent именем моего действия
- (IBAction)tappedEvent:(id)sender {
[self.view endEditing:YES]; }
указанная информация была получена из следующей ссылки, пожалуйста, обратитесь за дополнительной информацией или свяжитесь со мной, если вы не понимаете данные abouve.
http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
Ответ 10
Сначала вам нужно добавить текстовое поле delegete в файл .h. если не объявить
(BOOL)textFieldShouldReturn:(UITextField *)textField
этот метод не вызван. Сначала добавьте делегат и напишите код спрятать клавиатуру в этот метод.
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
попробуйте этот.
Ответ 11
Итак, вот что я сделал, чтобы убрать его после касания фона или возврата. Мне пришлось добавить делегат = self в viewDidLoad, а затем также методы делегатов в файлах .m.
.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITextFieldDelegate>
@property (strong, atomic) UITextField *username;
@end
.m
- (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;
}
self.username.delegate = self;
[self.username resignFirstResponder];
[self.view addSubview:self.username];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
@end
Ответ 12
Я знаю, что на это были ответы другие, но я нашел еще одну статью, которая также охватывала отсутствие фонового события - tableview или scrollview.
http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
Ответ 13
Поскольку теги говорят только iOS, я опубликую ответ для Swift 1.2 и iOs 8.4, добавьте их в свой класс контроллера быстрого просмотра:
// MARK: - Close keyboard when touching somewhere else
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true)
}
// MARK: - Close keyboard when return pressed
func textFieldShouldReturn(textField: UITextField!) -> Bool {
textField.resignFirstResponder()
return true
}
// MARK: -
Кроме того, не забудьте добавить UITextFieldDelegate в объявление класса и задать для вашего поля текстовые поля для себя (представление).
Ответ 14
Добавить делегат: UITextFieldDelegate
@interface ViewController : UIViewController <UITextFieldDelegate>
а затем добавьте этот метод делегата
//Это должно отлично работать
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
Ответ 15
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view.subviews enumerateObjectsUsingBlock:^(UIView* obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[UITextField class]]) {
[obj resignFirstResponder];
}
}];
}
когда вы используете более одного текстового поля на экране
С помощью этого метода вам не нужно указывать текстовое поле каждый раз, например
[textField1 resignFirstResponder];
[textField2 resignFirstResponder];
Ответ 16
Swift 2:
это то, что делается, чтобы делать все!
закрыть клавиатуру с помощью кнопки Done
или Touch outSide
, Next
для перехода к следующему входу.
Сначала измените TextFiled Return Key
на Next
в StoryBoard.
override func viewDidLoad() {
txtBillIdentifier.delegate = self
txtBillIdentifier.tag = 1
txtPayIdentifier.delegate = self
txtPayIdentifier.tag = 2
let tap = UITapGestureRecognizer(target: self, action: "onTouchGesture")
self.view.addGestureRecognizer(tap)
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
if(textField.returnKeyType == UIReturnKeyType.Default) {
if let next = textField.superview?.viewWithTag(textField.tag+1) as? UITextField {
next.becomeFirstResponder()
return false
}
}
textField.resignFirstResponder()
return false
}
func onTouchGesture(){
self.view.endEditing(true)
}
Ответ 17
Если вы не знаете текущий контроллер или текстовое представление, вы можете использовать цепочку ответчиков:
UIApplication.shared.sendAction(#selector(UIView.endEditing(_:)), to:nil, from:nil, for:nil)
Ответ 18
для быстрого 3-4 я фиксированного типа
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return false
}
просто скопируйте пасту в любом месте класса. Это решение просто работает, если вы хотите, чтобы все UItextfield работали одинаково, или если у вас есть только один!
Ответ 19
IN Swift 3
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
ИЛИ
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == yourtextfieldName
{
self.resignFirstResponder()
self.view.endEditing(true)
}
}