How to disable keyboard appearing when hitting on a text field , iOS?

后端 未结 8 1407
日久生厌
日久生厌 2021-02-07 19:50

I have a text field , and i need when the user presses it to show a custom picker.

The picker is shown fine , but the problem is that the keyboard appears on the bottom

相关标签:
8条回答
  • 2021-02-07 20:27

    It looks like all of these answers take one approach, to simply deny the keyboard before it comes up. This prevents first responder status, which has many advantages.

    One simple approach that allows you to maintain first responder status is to create an empty view and assign that to the inputView property on your input field. If you are using iOS 9 (or later?) you will also have to get rid of the inputAssistantItem objects as well.

    UITextField *field = [[UITextField alloc] init];
    field.inputView = self.emptyKeyboard.view;
    
    UITextInputAssistantItem *aItem = [field inputAssistantItem];
    aItem.leadingBarButtonGroups = @[];
    aItem.trailingBarButtonGroups = @[];
    

    Then if you want to control the field from an alternate view controller, you can do so by adding targets:

    [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];
    

    It is also possible to do this a lot more cleanly by subclassing UITextField.

    0 讨论(0)
  • 2021-02-07 20:27

    Use the textField Delegate,

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
    {
     textField=nil;
     return NO;
    }
    
    0 讨论(0)
  • 2021-02-07 20:31
    -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
    {
        // Here You can do additional code or task instead of writing with keyboard
        return NO;
    }
    

    this delegate method will get called first when you hit to textfield and if you write NO as a boolean value means you dont want to begin editing so it will not present Keyboard.

    0 讨论(0)
  • 2021-02-07 20:32

    Swift 3/4

    1. Add:- UITextFieldDelegate in your class.

    2. Add:- self.textField.delegate = self In ViewDidLoad

    3. last one just add this func -

      func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
          return false
      }
      
    0 讨论(0)
  • 2021-02-07 20:37

    swift 3.0 version

    First set the delegate for the text field

    self.textfield.delegate = self
    

    Then in an extension

    extension ViewController: UITextFieldDelegate {
        func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
            return false
        }
    }
    
    0 讨论(0)
  • 2021-02-07 20:37
    -(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 讨论(0)
提交回复
热议问题