Как отклонить клавиатуру цифровой клавиатуры, нажав в любом месте - PullRequest
51 голосов
/ 09 августа 2011

Я хотел бы знать самый простой код для отклонения клавиатуры цифровой клавиатуры при нажатии в любом месте вне цифровой клавиатуры.Это простое приложение для ввода числа внутри текстового поля, после чего пользователь может отклонить клавиатуру после того, как пользователь закончит вводить цифры в текстовом поле.Спасибо!:)

Ответы [ 15 ]

85 голосов
/ 09 августа 2011

Объявление текстового поля в качестве переменной экземпляра или свойства, если оно еще не выполнено, и реализация простого метода, подобного следующему:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    [textField resignFirstResponder];
}

отлично подойдет.

21 голосов
/ 26 февраля 2014

Попробуйте этот метод,

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
   [self.view endEditing:YES];
}

Теперь нажмите в любом месте и увидите, что клавиатура будет отклонена.: -)

7 голосов
/ 29 октября 2014

Для быстрого использования ниже кода

override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
 {
       textFiled.resignFirstResponder()
 }

Ознакомьтесь с последним обновлением следующих Ссылка

6 голосов
/ 09 августа 2011

Касание фона, чтобы закрыть клавиатуру

Перейдите в Xcode, если вы еще не там. Нам нужно добавить еще одно действие в наш класс контроллера. Добавьте следующую строку в ваш файл Control_FunViewController.h:

#import <UIKit/UIKit.h>
@interface Control_FunViewController : UIViewController { 
UITextField *nameField;
UITextField *numberField;
}
 @property (nonatomic, retain) IBOutlet UITextField *nameField; ]
@property (nonatomic, retain) IBOutlet UITextField *numberField; 
- (IBAction)textFieldDoneEditing:(id)sender; 
- (IBAction)backgroundTap:(id)sender; 
@end  

Сохранить файл заголовка; переключитесь на файл реализации и добавьте этот код, который просто сообщает обоим текстовым полям для получения статуса первого респондента, если он у него есть. Совершенно безопасно вызывать resignFirstResponder для элемента управления, который не является первым респондентом, поэтому мы можем безопасно вызывать его в обоих текстовых полях, не проверяя, является ли один из них первым респондентом.

- (IBAction)backgroundTap:(id)sender { 
[nameField resignFirstResponder]; 
[numberField resignFirstResponder];
}

TIP Сохраните этот файл и вернитесь в Интерфейсный Разработчик. Теперь нам нужно изменить базовый класс представления нашего пера. Если вы посмотрите в главное окно пера, вы увидите, что в этом представлении есть три значка. Третий, называемый View, является основным представлением нашего пера, в котором все остальные элементы управления и представления находятся в качестве подпредставлений. Нажмите один раз на иконку View, которая представляет вид контейнера нашего пера. Нажмите ␣4, чтобы вызвать инспектора идентификации. Здесь мы можем изменить базовый класс любого экземпляра объекта в Интерфейсном Разработчике.

Вы будете часто переключаться между заголовочными файлами и файлами реализации. К счастью, в Xcode есть комбинация клавиш, которая быстро переключает вас между этими файлами. Комбинация клавиш по умолчанию - ␣␣␣ (стрелка опции-команды-вверх), хотя вы можете изменить ее на что угодно, используя предпочтения Xcode.76

В поле с надписью Class в настоящее время указано UIView. Измените это, чтобы прочитать UIControl. Все элементы управления, которые способны запускать методы действия, являются подклассами UIControl, поэтому, изменив базовый класс, мы только что дали этому представлению возможность вызывать методы действия. Вы можете проверить это, нажав ␣2, чтобы вызвать инспектор соединений.

Перетащите из события Touch Down на значок «Владелец файла» и выберите действие backgroundTap: . Теперь касания в любом месте представления без активного элемента управления вызовут наш новый метод действия, который заставит клавиатуру убираться.

Примечание Сохраните перо, и давайте вернемся и попробуем. Скомпилируйте и снова запустите ваше приложение. На этот раз клавиатура должна исчезнуть не только при нажатии кнопки «Готово», но и при щелчке в любом месте, не являющемся активным элементом управления, чего и ожидает пользователь.

3 голосов
/ 02 сентября 2014

Я попытался реализовать некоторые решения здесь и обнаружил, что с ними были некоторые проблемы. Примечательно, что My UIView содержит UIScrollView, который перехватывает прикосновения.

Когда это не удавалось, я считал, что «постукивание в любом месте» - это немного неуказанное поведение, требующее от пользователя угадать, как убрать клавиатуру вместо того, чтобы дать им четкое руководство.

Кроме того, у меня есть кнопка «Возврат» или «Готово» на любой другой клавиатуре, которую я показываю в приложении, поэтому я решил дать пользователю простой, интуитивно понятный, четко определенный способ отклонить клавиатуру с помощью цифры. Подушка, которая соответствовала другим используемым механизмам отклонения клавиатуры.

Я понимаю, что это не то, что ОП специально запрашивает, но я полагаю, что это лучшее решение, чем запрос "где угодно" (и его легко реализовать!).

Следующий код вызывается как часть -viewDidLoad в моем UIViewController.

// My app is restricted to portrait-only, so the following works
UIToolbar *numberPadAccessoryInputView      = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44.0f)];

// My app-wide tint color is a gold-ish color, so darkGray contrasts nicely
numberPadAccessoryInputView.barTintColor    = [UIColor darkGrayColor];

// A basic "Done" button, that calls [self.textField resignFirstResponder]
UIBarButtonItem *numberPadDoneButton        = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self.textField action:@selector(resignFirstResponder)];

// It's the only item in the UIToolbar's items array
numberPadAccessoryInputView.items           = @[numberPadDoneButton];

// In case the background of the view is similar to [UIColor darkGrayColor], this
// is put as a contrasting edge line at the top of the UIToolbar
UIView *topBorderView                       = [[UIView alloc] initWithFrame:CGRectMake(0, 0, numberPadAccessoryInputView.frame.size.width, 1.0f)];
topBorderView.backgroundColor               = [UIColor whiteColor];
[numberPadAccessoryInputView addSubview:topBorderView];

// Make it so that this UITextField shows the UIToolbar
self.textField.inputAccessoryView           = numberPadAccessoryInputView;

При этом к верхней части клавиатуры добавлен приятный, симпатичный, интуитивно понятный элемент управления, который четко указывает, как пользователь должен продолжить работу после завершения ввода текста.

Я все еще верю, что Apple должна предоставить кнопку «Готово» для этой клавиатуры (например, ссылку, опубликованную Janak Nirmal), но для меня это самое элегантное решение не от Apple.

2 голосов
/ 02 сентября 2016

Вы можете очень хорошо реализовать ответ @ mbm, поставив didSet на розетку и прикрепив туда свой inputAccessoryView:

Swift-код:

  @IBOutlet var input: UITextField! { didSet {
    let toolbar = UIToolbar(frame: CGRect(origin: CGPoint.zero, size: CGSize(width: 0, height: 44)))
    toolbar.items = [
      UIBarButtonItem(barButtonSystemItem: .done, target: self.input,
        action: #selector(resignFirstResponder))
    ]
    input.inputAccessoryView = toolbar
  }}

В xcode 8 / iOS 10В конечном итоге это выглядит примерно так:

enter image description here

2 голосов
/ 11 февраля 2015

Вы должны использовать UITapGestureRecognizer для достижения этого.

UITapGestureRecognizer *tapToDismiss = [[UITapGestureRecognizer alloc]initWithTarget: self action: @selector (dismissNumberKeyBoard:)];

Тогда в вашем методе dismissNumberKeyboard,

-(Void)dismissNumberKeyboard : (id)sender {

   [yourTextField resignFirstResponder];

}

Удачного кодирования!

1 голос
/ 09 августа 2011

Просто создайте простую функцию, подобную этой.

    -(IBAction)hideKeyboard:(id)Sender
{
    [_textValue resignFirstResponder];
}

Теперь перейдите к файлу nib и соедините эту функцию с текстовым полем с помощью didEndOnExit, и все готово.Теперь, когда вы нажмете за пределами вашего текстового поля, клавиатура скроется.

0 голосов
/ 22 января 2018

Для swift 3/4 мне нравится этот случай:

  1. View Controller является подклассом для UITextFieldDelegate
  2. В функции viewDidLoad вы должны установить yourPhonePadField.delegate = self
  3. И переопределить эту функцию:

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
       self.view.endEditing(true) 
    }
    
0 голосов
/ 02 февраля 2015

Для Swift проще всего отклонить клавиатуру для всех текстовых полей, нажав в любом месте за пределами текстового поля:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
{
    self.view.endEditing(true)
}
...