问题
I put a numeric keypad in my app for inputing numbers into a text view, but in order to input numbers I have to click on the text view. Once I do so, the regular keyboard comes up, which I don\'t want.
How can I disable the keyboard altogether? Any help is greatly appreciated.
回答1:
The UITextField's inputView property is nil by default, which means the standard keyboard gets displayed.
If you assign it a custom input view, or just a dummy view then the keyboard will not appear, but the blinking cursor will still appear:
UIView* dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
myTextField.inputView = dummyView; // Hide keyboard, but show blinking cursor
If you want to hide both the keyboard and the blinking cursor then use this approach:
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
return NO; // Hide both keyboard and blinking cursor.
}
回答2:
For Swift 2.x, 3.x, 4.x, 5.x
textField.inputView = UIView()
does the trick
回答3:
Depending on how you have your existing buttons working this could break them, but you could prevent the keyboard from showing up setting the textView's editable property to NO
myTextView.editable = NO
回答4:
If it's a UITextField, you can set it's enabled
property to NO.
If it's a UITextView, you can implement -textViewShouldBeginEditing:
in its delegate to return NO, so that it'll never start editing. Or you can subclass it and override -canBecomeFirstResponder
to return NO. Or you could take advantage of its editing behavior and put your numeric buttons into a view which you use as the text view's inputView
. This is supposed to cause the buttons to be displayed when the text view is edited. That may or may not be what you want.
回答5:
I have the same problem when had 2 textfields on the same view. My purpose was to show a default keyboard for one textfield and hide for second and show instead a dropdown list.
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
method simply did not work as I expected for 2 textfields , the only workaround I found was
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
This will totally hide the keyboard for a target textField (DropDownList in my case) and show a default one when user switches to the 2nd textfield (Account number on my screenshot)
回答6:
To disable UITextField keyboard:
- Go to Main.Storyboard
- Click on the UITextField to select it
- Show the Attributes inspector
- Uncheck the User Interaction Enabled
To disable UITextView keyboard:
- Go to Main.Storyboard
- Click on the UITextView to select it
- Show the Attributes inspector
- Uncheck the Editable Behavior
回答7:
There is a simple hack to it. Place a empty button (No Text) above the keyboard and have a action Event assign to it. This will stop keyboard coming up and you can perform any action you want in the handle for the button click
回答8:
private void TxtExpiry_EditingDidBegin(object sender, EventArgs e)
{
((UITextField)sender).ResignFirstResponder();
}
In C# this worked for me, I don't use the storyboard.
回答9:
In Xcode 8.2 you can do it easily by unchecking state "enabled" option.
- Click on the textField you want to be uneditable
- Go to attirube inspector on right side
- Uncheck "enabled" for State
Or if you want to do it via code. You can simply create an @IBOutlet of this text field, give it a name and then use this variable name in the viewDidLoad func (or any custom one if you intent to) like this (in swift 3.0.1):
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
myTextField.isEditable = false
}
来源:https://stackoverflow.com/questions/5615806/disable-uitextfield-keyboard