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

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

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

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

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

редактировать


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

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

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

8 ответов


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

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


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

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

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


использовать делегат textfield.

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

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

один простой подход, который позволяет поддерживать статус первого ответчика, - создать пустое представление и назначить его свойству 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.


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

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

-(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;
    }
}

swift 3.0 версия

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

self.textfield.delegate = self

затем в пристройку

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

Swift 3/4

  1. добавить:- UITextFieldDelegate в своем классе.

  2. добавить:- self.объект TextField.делегат = self В ViewDidLoad

  3. последний просто добавьте этот func -

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

    return false
    

    }