ios 以编程方式更改 UITextField 键盘类型
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7301018/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Programmatically change UITextField Keyboard type
提问by eric.mitchell
Is it possible to programmatically change the keyboard type of a uitextfield so that something like this would be possible:
是否可以以编程方式更改 uitextfield 的键盘类型,以便这样的事情成为可能:
if(user is prompted for numeric input only)
[textField setKeyboardType: @"Number Pad"];
if(user is prompted for alphanumeric input)
[textField setKeyboardType: @"Default"];
回答by PengOne
There is a keyboardType
property for a UITextField
:
有一个keyboardType
属性UITextField
:
typedef enum {
UIKeyboardTypeDefault, // Default type for the current input method.
UIKeyboardTypeASCIICapable, // Displays a keyboard which can enter ASCII characters, non-ASCII keyboards remain active
UIKeyboardTypeNumbersAndPunctuation, // Numbers and assorted punctuation.
UIKeyboardTypeURL, // A type optimized for URL entry (shows . / .com prominently).
UIKeyboardTypeNumberPad, // A number pad (0-9). Suitable for PIN entry.
UIKeyboardTypePhonePad, // A phone pad (1-9, *, 0, #, with letters under the numbers).
UIKeyboardTypeNamePhonePad, // A type optimized for entering a person's name or phone number.
UIKeyboardTypeEmailAddress, // A type optimized for multiple email address entry (shows space @ . prominently).
UIKeyboardTypeDecimalPad, // A number pad including a decimal point
UIKeyboardTypeTwitter, // Optimized for entering Twitter messages (shows # and @)
UIKeyboardTypeWebSearch, // Optimized for URL and search term entry (shows space and .)
UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, // Deprecated
} UIKeyboardType;
Your code should read
你的代码应该阅读
if(user is prompted for numeric input only)
[textField setKeyboardType:UIKeyboardTypeNumberPad];
if(user is prompted for alphanumeric input)
[textField setKeyboardType:UIKeyboardTypeDefault];
回答by jterry
It's worth noting that if you want a currently-focusedfield to update the keyboard type immediately, there's one extra step:
值得注意的是,如果您希望当前聚焦的字段立即更新键盘类型,还有一个额外的步骤:
// textField is set to a UIKeyboardType other than UIKeyboardTypeEmailAddress
[textField setKeyboardType:UIKeyboardTypeEmailAddress];
[textField reloadInputViews];
Without the call to reloadInputViews
, the keyboard will not change until the selected field (the first responder) loses and regains focus.
如果没有调用reloadInputViews
,键盘将不会改变,直到所选字段(第一响应者)失去并重新获得焦点。
A full list of the UIKeyboardType
values can be found here, or:
可以在此处找到完整的UIKeyboardType
值列表,或者:
typedef enum : NSInteger {
UIKeyboardTypeDefault,
UIKeyboardTypeASCIICapable,
UIKeyboardTypeNumbersAndPunctuation,
UIKeyboardTypeURL,
UIKeyboardTypeNumberPad,
UIKeyboardTypePhonePad,
UIKeyboardTypeNamePhonePad,
UIKeyboardTypeEmailAddress,
UIKeyboardTypeDecimalPad,
UIKeyboardTypeTwitter,
UIKeyboardTypeWebSearch,
UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable
} UIKeyboardType;
回答by Alan Moore
Yes you can, for example:
是的,您可以,例如:
[textField setKeyboardType:UIKeyboardTypeNumberPad];
回答by fonz
textFieldView.keyboardType = UIKeyboardType.PhonePad
This is for swift. Also in order for this to function properly it must be set after the textFieldView.delegate = self
这是为了迅捷。此外,为了使其正常运行,必须在textFieldView.delegate = self
回答by Hossam Ghareeb
to make the text field accept alpha numeric only set this property
使文本字段接受字母数字只设置此属性
textField.keyboardType = UIKeyboardTypeNamePhonePad;
回答by Kishor Kumar Rawat
_textField .keyboardType = UIKeyboardTypeAlphabet;
_textField .keyboardType = UIKeyboardTypeASCIICapable;
_textField .keyboardType = UIKeyboardTypeDecimalPad;
_textField .keyboardType = UIKeyboardTypeDefault;
_textField .keyboardType = UIKeyboardTypeEmailAddress;
_textField .keyboardType = UIKeyboardTypeNamePhonePad;
_textField .keyboardType = UIKeyboardTypeNumberPad;
_textField .keyboardType = UIKeyboardTypeNumbersAndPunctuation;
_textField .keyboardType = UIKeyboardTypePhonePad;
_textField .keyboardType = UIKeyboardTypeTwitter;
_textField .keyboardType = UIKeyboardTypeURL;
_textField .keyboardType = UIKeyboardTypeWebSearch;
回答by Sanket Ray
Swift 4
斯威夫特 4
If you are trying to change your keyboard type when a condition is met, follow this. For example: If we want to change the keyboard type from Defaultto Number Padwhen the count of the textfield is 4 or 5, then do this:
如果您在满足条件时尝试更改键盘类型,请按照此操作。例如:如果我们想在文本字段的计数为 4 或 5 时将键盘类型从默认更改为数字键盘,请执行以下操作:
textField.addTarget(self, action: #selector(handleTextChange), for: .editingChanged)
@objc func handleTextChange(_ textChange: UITextField) {
if textField.text?.count == 4 || textField.text?.count == 5 {
textField.keyboardType = .numberPad
textField.reloadInputViews() // need to reload the input view for this to work
} else {
textField.keyboardType = .default
textField.reloadInputViews()
}
回答by Kyle Rosenbluth
There is a property for this called keyboardType
.
What you'll want to do is replace where you have strings @"Number Pad
and @"Default
with UIKeyboardTypeNumberPad
and UIKeyboardTypeDefault
.
有一个名为keyboardType
. 什么,你会想要做的就是代替,你必须弦 @"Number Pad
和@"Default
与UIKeyboardTypeNumberPad
和UIKeyboardTypeDefault
。
Your new code should look something like this:
您的新代码应如下所示:
if(user is prompted for numeric input only)
[textField setKeyboardType:UIKeyboardTypeNumberPad];
else if(user is prompted for alphanumeric input)
[textField setKeyboardType:UIKeyboardTypeDefault];
Good Luck!
祝你好运!
回答by pableiros
This is the UIKeyboardTypes
for Swift 3:
这是UIKeyboardTypes
Swift 3 的:
public enum UIKeyboardType : Int {
case `default` // Default type for the current input method.
case asciiCapable // Displays a keyboard which can enter ASCII characters
case numbersAndPunctuation // Numbers and assorted punctuation.
case URL // A type optimized for URL entry (shows . / .com prominently).
case numberPad // A number pad with locale-appropriate digits (0-9, ?-?, ?-?, etc.). Suitable for PIN entry.
case phonePad // A phone pad (1-9, *, 0, #, with letters under the numbers).
case namePhonePad // A type optimized for entering a person's name or phone number.
case emailAddress // A type optimized for multiple email address entry (shows space @ . prominently).
@available(iOS 4.1, *)
case decimalPad // A number pad with a decimal point.
@available(iOS 5.0, *)
case twitter // A type optimized for twitter text entry (easy access to @ #)
@available(iOS 7.0, *)
case webSearch // A default keyboard type with URL-oriented addition (shows space . prominently).
@available(iOS 10.0, *)
case asciiCapableNumberPad // A number pad (0-9) that will always be ASCII digits.
public static var alphabet: UIKeyboardType { get } // Deprecated
}
This is an example to use a keyboard type from the list:
这是使用列表中的键盘类型的示例:
textField.keyboardType = .numberPad
回答by Brian
for people who want to use UIDatePicker
as input:
对于想要UIDatePicker
用作输入的人:
UIDatePicker *timePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 250, 0, 0)];
[timePicker addTarget:self action:@selector(pickerChanged:)
forControlEvents:UIControlEventValueChanged];
[_textField setInputView:timePicker];
// pickerChanged:
- (void)pickerChanged:(id)sender {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"d/M/Y"];
_textField.text = [formatter stringFromDate:[sender date]];
}