Как отменить клавиатуру 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.resign‌​FirstResponder), 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 случая,

  • когда UITextField внутри UIScrollView

  • когда UITextField вне UIScrollView

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

Ответ 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)
        }
    }