Отключить клавиатуру UITextField?

#iphone #cocoa-touch #uitextfield #iphone-softkeyboard

#iPhone #cocoa-touch #uitextfield #iphone-программная клавиатура

Вопрос:

Я поместил цифровую клавиатуру в свое приложение для ввода чисел в текстовое представление, но для ввода чисел мне нужно щелкнуть по текстовому представлению. Как только я это сделаю, появится обычная клавиатура, которая мне не нужна.

Как я могу полностью отключить клавиатуру? Любая помощь приветствуется.

Ответ №1:

Свойство inputView для UITextField по умолчанию равно нулю, что означает, что отображается стандартная клавиатура.

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

 UIView* dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
myTextField.inputView = dummyView; // Hide keyboard, but show blinking cursor
  

Если вы хотите скрыть и клавиатуру, и мигающий курсор, используйте этот подход:

 -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    return NO;  // Hide both keyboard and blinking cursor.
}
  

Комментарии:

1. Приведенный ниже ответ Калеба объясняет это, но я хотел добавить, что любой UIView может быть установлен в качестве inputView . Это приведет к тому, что представление будет анимироваться так же, как и стандартная клавиатура.

2. Это полезно при разработке пользовательского расширения приложения для клавиатуры. Если вы включите панель пользовательского поиска или UITextField в пользовательскую клавиатуру, она попытается отобразить клавиатуру (хотя она находится На клавиатуре), что означает, что она отключит вашу текущую клавиатуру от иерархии представлений / контроллеров, а затем воссоздаст ее заново. Я решил это с помощью этого олдскульного взлома. Спасибо!

3. Наконец, я использовал более чистый подход, используя прокси-сервер внешнего вида, но полагаясь на ту же концепцию: [[Внешний вид UITextField, который сохраняется в:[Класс панели поиска пользователя], nil] setInputView:[Новый пользовательский просмотр]];

4. Это работает, но если вы используете клавиатуру Mac для записи в UITextField, приложение вылетает. Это не очень хорошее решение.

Ответ №2:

Для Swift 2.x, 3.x, 4.x, 5.x

 textField.inputView = UIView()
  

делает трюк

Комментарии:

1. Мартин и Сатиш сделали это снова 👌🏻

2. Вы можете скрыть accessoryView с помощью textField.inputAccessoryView = UIView() , а также вы можете скрыть курсор с помощью textField.tintColor = .white (Swift 5.x).

3. Отличная работа для меня……

Ответ №3:

Если это UITextField, вы можете присвоить его enabled свойству значение NO.

Если это UITextView, вы можете реализовать -textViewShouldBeginEditing: в его делегате возврат NO, чтобы он никогда не начинал редактирование. Или вы можете создать ее подкласс и переопределить -canBecomeFirstResponder , чтобы возвращать NO. Или вы могли бы воспользоваться ее режимом редактирования и поместить свои цифровые кнопки в представление, которое вы используете в качестве текстового представления inputView . Предполагается, что это приведет к отображению кнопок при редактировании текстового представления. Это может быть или не быть тем, что вы хотите.

Комментарии:

1. кстати, это текстовое поле. Ну, вот как я заставляю кнопки писать в определенном текстовом поле, устанавливая флаги и вызывая if (current.tag == 10) { textfieldflag = 1; [loanAmount setUserInteractionEnabled: НЕТ]; [период setUserInteractionEnabled: ДА]; [процент setUserInteractionEnabled: ДА]; //[deposit setUserInteractionEnabled: ДА]; loanAmount.editable = НЕТ; }

2. ого, заработало. Спасибо за это, что-то настолько простое, и у Google не было ответа.

Ответ №4:

В зависимости от того, как у вас работают существующие кнопки, это может привести к их поломке, но вы могли бы запретить отображение клавиатуры, установив для редактируемого свойства TextView значение NO

 myTextView.editable = NO
  

Комментарии:

1. Он запросил UITextField, а не UITextView

Ответ №5:

У меня такая же проблема, когда в одном представлении было 2 текстовых поля. Моей целью было показать клавиатуру по умолчанию для одного текстового поля и скрыть для второго и показать вместо этого выпадающий список.

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
  

метод просто не сработал, как я ожидал, для 2 текстовых полей, единственное решение, которое я нашел, было

     UIView* dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
    myTextField.inputView = dummyView; 
    myTextField.inputAccessoryView = dummyView; 
    myTextField.tintColor =  myTextField.backgroundColor; //to hide a blinking cursor
  

Это полностью скроет клавиатуру для целевого текстового поля (выпадающий список в моем случае) и покажет клавиатуру по умолчанию, когда пользователь переключится на 2-е текстовое поле (номер учетной записи на моем скриншоте)

введите описание изображения здесь

Комментарии:

1. Ваш ответ действительно великолепен! Потому что у него есть решение с установкой inputAccessoryView на dummyView. Я боролся — как скрыть это в нижней части экрана.

Ответ №6:

введите описание изображения здесьДля этого есть простой способ взлома. Поместите пустую кнопку (без текста) над клавиатурой и назначьте ей событие action. Это остановит отображение клавиатуры, и вы сможете выполнить любое действие, которое вы хотите, в дескрипторе для нажатия кнопки

Ответ №7:

Чтобы отключить клавиатуру UITextField:

  1. Перейдите к основному.Раскадровка
  2. Нажмите на UITextField, чтобы выбрать его
  3. Показать инспектор атрибутов
  4. Снимите флажок Взаимодействие с пользователем включено

Чтобы отключить клавиатуру UITextView:

  1. Перейдите к основному.Раскадровка
  2. Нажмите на UITextView, чтобы выбрать его
  3. Показать инспектор атрибутов
  4. Снимите флажок с редактируемого поведения

Комментарии:

1. Если вы сделаете это, текстовое поле будет недоступно. Таким образом, вы не можете щелкнуть и написать какой-либо материал.

Ответ №8:

Я использовал keyboardWillShow Notification и textField.endEditing(true) :

 lazy var myTextField: UITextField = {
    let textField = UITextField()
    // ....
    return textField
}()

override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
}

@objc func keyboardWillShow(_ notification: Notification) {
        
    myTextField.endEditing(true)

    // if using a textView >>> myTextView.endEditing(true) <<<
}
  

Ответ №9:

 private void TxtExpiry_EditingDidBegin(object sender, EventArgs e)
    {
        ((UITextField)sender).ResignFirstResponder();
    }
  

В C # у меня это сработало, я не использую раскадровку.

Ответ №10:

В Xcode 8.2 вы можете сделать это легко, сняв флажок указать «включено».

  1. Нажмите на текстовое поле, которое вы хотите сделать недоступным для редактирования
  2. Перейдите к attirube inspector с правой стороны
  3. Снимите флажок «включено» для состояния

введите описание изображения здесь

Или, если вы хотите, сделать это с помощью кода. Вы можете просто создать @IBOutlet этого текстового поля, присвоить ему имя, а затем использовать это имя переменной в функции viewDidLoad (или любой пользовательской, если хотите), например (в swift 3.0.1):

 override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    myTextField.isEditable = false
}
  

Комментарии:

1. Редактируемый не существует