Я хочу, чтобы убрать клавиатуру iPhone, когда пользователь удаляет все, что находится вне клавиатуры. Как я могу это сделать? Я знаю, что мне нужно уволить ответчика, но нужно знать, как его реализовать, когда пользователь выходит из пространства клавиатуры.
Как я могу отменить клавиатуру, если пользователь отключит экранную клавиатуру?
Ответ 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) }