it-swarm.com.ru

Как отключить отображение клавиатуры при нажатии на текстовое поле iOS?

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

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

Это проект для iPad, который я пытаюсь преобразовать из своего iPhone. На iPhone это работает хорошо, а клавиатура всегда скрыта.

Что я мог упустить/забыть сделать здесь?

Правка


Для дальнейшего ознакомления то, что на самом деле здесь произошло, было то, что фактически оба раза (iphone & ipad) клавиатура была не скрыта. Я просто подумал, что это было спрятано в iphone, потому что мой сборщик, который выскочил снизу, скрывал клавиатуру, как она была на нем. Но на iPad это было не так.

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

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

10
user1498477
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    // Here You can do additional code or task instead of writing with keyboard
    return NO;
}

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

30
Maheta Dhaval K
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if(textfield == yourtextField)
    {
        [textfield resignFirstResponder];
        // Show you custom picker here....
        return NO;
    }     
}

и вам нужно реализовать uitextfielddelegate в контроллере.

и назначьте делегата для yourtextField.

8
V.J.

Используйте текстовое поле делегата.

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{        
    return NO;
}
6
AllianceTek

Похоже, что во всех этих ответах используется один подход: просто отрицать клавиатуру до ее появления. Это предотвращает статус первого респондента, который имеет много преимуществ.

Один простой подход, который позволяет вам поддерживать статус первого респондента, состоит в том, чтобы создать пустое представление и присвоить его свойству inputView в вашем поле ввода. Если вы используете iOS 9 (или более позднюю версию?), Вам также придется избавиться от объектов inputAssistantItem.

UITextField *field = [[UITextField alloc] init];
field.inputView = self.emptyKeyboard.view;

UITextInputAssistantItem *aItem = [field inputAssistantItem];
aItem.leadingBarButtonGroups = @[];
aItem.trailingBarButtonGroups = @[];

Затем, если вы хотите управлять полем из контроллера альтернативного представления, вы можете сделать это, добавив цели:

[field addTarget:self.numberPad action:@selector(editingBegan:) forControlEvents:UIControlEventEditingDidBegin];
[field addTarget:self.numberPad action:@selector(editingEnded:) forControlEvents:UIControlEventEditingDidEnd];
[field addTarget:self.numberPad action:@selector(fieldChanged:) forControlEvents:UIControlEventEditingChanged];

Также возможно сделать это намного более аккуратно, создав подкласс UITextField.

3
Chuck Wolber

Используйте делегата textField,

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
 textField=nil;
 return NO;
}
1
Praveen

версия Swift 3.

Сначала установите делегата для текстового поля

self.textfield.delegate = self

Тогда в расширении

extension ViewController: UITextFieldDelegate {
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        return false
    }
}
0
Fangming

Swift 3/4

  1. Добавьте: - ITextFieldDelegate в своем классе.

  2. Добавить: - self.textField.delegate = self In ViewDidLoad

  3. последний просто добавьте эту функцию -

    func textFieldShouldBeginEditing (_ textField: UITextField) -> Bool {

    return false
    

    }

0
RAHUL NIMJE
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    // Here you can do for Specific text Field by 
    if (textField==(the text field you don't want to show keyboard)) {
        NSLog(@"don't show keyboard");
        return NO;
    }
    else {
        return YES;
    }
}
0
UpendranathReddy