Подтвердить что ты не робот

Как я могу отменить клавиатуру, если пользователь отключит экранную клавиатуру?

Я хочу, чтобы убрать клавиатуру iPhone, когда пользователь удаляет все, что находится вне клавиатуры. Как я могу это сделать? Я знаю, что мне нужно уволить ответчика, но нужно знать, как его реализовать, когда пользователь выходит из пространства клавиатуры.

4b9b3361

Ответ 1

Вам нужно добавить UITapGestureRecogniser и назначить его представлению, а затем вызвать отставку первого ответчика в текстовом поле на его селекторе.

Код:

В viewDidLoad

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                      action:@selector(dismissKeyboard)];

[self.view addGestureRecognizer:tap];

В dismissKeyboard:

-(void)dismissKeyboard {
       [aTextField resignFirstResponder];
}

(где aTextField - текстовое поле, которое отвечает за клавиатуру)

ВАРИАНТ 2

Если вы не можете позволить себе добавить gestureRecognizer, вы можете попробовать это

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch * touch = [touches anyObject];
    if(touch.phase == UITouchPhaseBegan) {
        [aTextField resignFirstResponder];
    }
}

Ответ 2

Самое простое решение, которое я использовал, это:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

      [self.view endEditing:YES];

}

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

Основываясь на документации Apple, я думаю, что этот метод существует специально для решения этой проблемы.

Ответ 3

Добавьте атрибут TapGesture Recognizer, но убедитесь, что hascelsTouchesInView = NO

UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(closeTextInput)];
tapGesture.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tapGesture];
[tapGesture release];

Ответ 4

Вам нужно будет добавить UITapGestureRecogniser и назначить его представлению, а затем вызвать отставку первого ответчика в текстовом поле на его селекторе.

Код:

In viewDidLoad

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                      action:@selector(dismissKeyboard)];

[self.view addGestureRecognizer:tap];

В приглашении:

-(void)dismissKeyboard {
       [self.view endEditing:true];
}

Ответ 5

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

UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc]   initWithTarget:self action:@selector(overlayTouched:)]; 
gesture.delegate = self;
[(UITapGestureRecognizer *)gesture setNumberOfTouchesRequired:1];

UIView* trans = [[UIView alloc] initWithFrame:[[delegate view] bounds]];
[trans setOpaque:NO];
[trans setAutoresizingMask:UIViewAutoresizingFlexibleWidth |    UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin];
[trans setAlpha:0.3];
[trans setUserInteractionEnabled:YES];
trans.multipleTouchEnabled = YES;
[trans addGestureRecognizer:gesture];
[trans setBackgroundColor:[UIColor blackColor]];
[trans setTag:BLACK_SCREEN_VIEW];

Ответ 6

Это решение Swift 4:

 let tap = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))

 self.view.addGestureRecognizer(tap)

И увольнение с клавиатуры

@objc func dismissKeyboard() {
    self.view.endEditing(true)
}

Ответ 7

Другой способ сделать это просто:

Делает ваш UIView as UIControl in custom class in the interface builder, тогда вы можете прикрепить IBAction метод в Touch up inside event вашего UIView : UIControl, а затем положить [yourTextField resignFirstResponder] внутри IBAction method, например:

- (IBAction) hideKeyboard: (id) sender
{
    // If you have more than one textfield to dismiss, of course only can be active 1, but here you can't know who is it, because sender will be the UIView : UIControl
    [alias resignFirstResponder];
    [password resignFirstResponder];
}

Затем у вас есть другой вариант, и он помещается в ваше текстовое поле the return key of the keyboard as Done (это может быть любой из них, но для этого нужно сделать это хорошо, потому что возврат означает выполнение действия с формой) в интерфейсе, поэтому вы можете нажать Done и скрыть клавиатуру, но в этом случае вы должны прикрепить предыдущий метод IBAction к событию Did end on exit.

И таким образом клавиатура скроет touching outside или коснется Done с клавиатуры.

Если вы хотите улучшить код, только скроете клавиатуру, касающуюся Done с клавиатуры, метод должен быть:

// Attach all textFields here on Did end on exit event, will not work if touch outside the keyboard
- (IBAction) hideKeyboard: (id) sender
{
      [sender resignFirstResponder];
}

Ответ 8

Если вы находитесь в UITableViewController или имеете UITableView, с которым пользователь будет взаимодействовать, в вашем ViewDidLoad вы можете просто сделать:

tableView.KeyboardDismissMode = UIScrollViewKeyboardDismissMode.OnDrag;

Примечание: это синтаксис Xamarin.iOS.

Ответ 9

Если вы не хотите добавлять распознаватель жестов, вы также можете использовать метод touchesBegin

Код в Swift 4

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { view.endEditing(true) }