У меня есть UITextfield, для которого я хотел бы отменить клавиатуру. Я не могу заставить клавиатуру уйти, независимо от того, какой код я использую.
Как отключить клавиатуру iOS?
Ответ 1
[myTextField resignFirstResponder]
Здесь второй абзац в разделе "Отображение и скрытие клавиатуры".
Ответ 2
Если у вас несколько текстовых полей и не знаете, кто из них первый ответчик (или у вас просто нет доступа к текстовым полям из любого места, где вы пишете этот код), вы можете вызвать endEditing:
в родительском представлении содержащие текстовые поля.
В режиме контроллера вида он будет выглядеть так:
[self.view endEditing:YES];
Параметр заставляет текстовое поле сбрасывать статус первого ответчика. Если вы использовали делегат для выполнения проверки и хотели остановить все до тех пор, пока содержимое текстового поля не будет действительным, вы также можете закодировать его следующим образом:
BOOL didEndEditing = [self.view endEditing:NO];
if (didEndEditing) {
// on to the next thing...
} else {
// text field must have said to first responder status: "never wanna give you up, never wanna let you down"
}
Метод endEditing:
намного лучше, чем рассказать отдельные текстовые поля resignFirstResponder
, но по какой-то причине я даже не узнал об этом до недавнего времени.
Ответ 3
Есть случаи, когда текстовое поле не является первым ответчиком, но клавиатура находится на экране. В этих случаях приведенные выше методы не могут отменить клавиатуру.
Один пример того, как туда добраться:
- программно нажмите ABPersonViewController на экран; открыть любой контакт;
- коснитесь поля "примечание" (которое становится первым ответчиком и запускает клавиатуру);
- проведите пальцем влево в любом другом поле, чтобы появилась кнопка "Удалить";
- к этому моменту у вас нет первого ответчика среди текстовых полей (просто проверьте программно), но клавиатура все еще там. Вызов [view endEditing: YES] ничего не делает.
В этом случае вам также нужно попросить контроллер вида выйти из режима редактирования:
[viewController setEditing:NO animated:YES];
Ответ 4
Я предлагаю вам добавить и действие в файл заголовка:
-(IBAction)removeKeyboard;
И в реализации напишите что-нибудь вроде этого:
-(IBAction)removeKeyboard
{
[self.textfield resignFirstResponder];
}
В файле NIB подключитесь из UITextFiled к файловому владельцу в опции DidEndOnExit. Таким образом, при нажатии клавиши возврата клавиатура исчезнет.
Надеюсь, что это поможет!
Ответ 5
В вашем представлении контроллера файла YourViewController.h убедитесь, что вы реализуете протокол UITextFieldDelegate:
@interface YourViewController : <UITextFieldDelegate>
@end
Затем в файле YourViewController.m реализуется следующий метод экземпляра:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.yourTextField1 resignFirstResponder];
[self.yourTextField2 resignFirstResponder];
...
[self.yourTextFieldn resignFirstResponder];
}
Ответ 6
Я обнаружил случай, когда endEditing
и resignFirstResponder
терпят неудачу. Это сработало для меня в тех случаях.
ObjC
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
[self setEditing:NO];
стриж
UIApplication.shared.sendAction(#selector(resignFirstResponder), to: nil, from: nil, for: nil)
Ответ 7
в крайнем случае 💩
let dummyTextView = UITextView(frame: .zero)
view.addSubview(dummyTextView)
dummyTextView.becomeFirstResponder()
dummyTextView.resignFirstResponder()
dummyTextView.removeFromSuperview()
Ответ 8
Если вы не знаете, какой textField является первым ответчиком, вы можете его найти. Я использую эту функцию:
UIView *resignFirstResponder(UIView *theView)
{
if([theView isFirstResponder])
{
[theView resignFirstResponder];
return theView;
}
for(UIView *subview in theView.subviews)
{
UIView *result = resignFirstResponder(subview);
if(result) return result;
}
return nil;
}
Затем в вашем кодовом вызове:
UIView *resigned = resignFirstResponder([UIScreen mainScreen]);
Ответ 9
Это отменит одно текстовое поле.
// Swift
TextField.resignFirstResponder()
// Objective C
[TextField resignFirstResponder];
Чтобы отменить любое текстовое поле, используйте ниже код
// Swift
self.view!.endEditing(true)
// Objective C
[self.view endEditing:YES];
Ответ 10
Для отставки любого текстового поля в приложении
UIApplication.shared.keyWindow?.endEditing(true)
Этот подход чист и гарантированно работает, потому что keyWindow по определению является корневым представлением всех возможных представлений, отображающих клавиатуру (источник):
Окно клавиш получает клавиатурные и другие не связанные с касанием события. Только одно окно одновременно может быть ключевым окном.
Ответ 11
Вы просто замените yourTextFieldName
, как вы уже догадались! ваше текстовое поле. Это закроет клавиатуру.
[yourTextFieldName resignFirstResponder];
Ответ 12
-(void)methodName
{
[textFieldName resignFirstResponder];
}
вызовите этот метод (methodName) с помощью didEndOnExit
Ответ 13
Для Swift 3
Вы можете скрыть клавиатуру следующим образом:
textField.resignFirstResponder()
Если вы хотите скрыть клавиатуру, когда пользователь нажимает кнопку "intro", вы должны реализовать следующий метод UITextFieldDelegate
:
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
Ответ 14
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
// your code
[textField reloadInputViews];
}
Ответ 15
3 простых и быстрых шага
Добавьте UITextFieldDelegate
в свой класс, как UITextFieldDelegate
ниже:
class RegisterVC: UIViewController, UITextFieldDelegate {
//class implementation
}
в реализации класса добавьте функцию делегата textFieldShouldEndEditing:
::
internal func textFieldShouldReturn(_ textField: UITextField) -> Bool {
self.view.endEditing(true)
return true
}
и в качестве последнего шага, установите ваш UITextField
UITextField
на себя, где-то подходящим. Например, внутри функции viewDidLoad
:
override func viewDidLoad(){
super.viewDidLoad()
myTextField1.delegate = self
myTextField2.delegate = self
..
..
}
Теперь, когда пользователь нажимает клавишу возврата, клавиатура будет отклоняться.
Я также подготовил фрагмент кода, вы можете проверить его здесь.
Ответ 16
Swift 4.2 и у меня это сработало
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
self.textField.delegate = self
}
// hide key board when the user touches outside keyboard
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
// user presses return key
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}