Programmatically change UITextField Keyboard type
是否可以通过编程方式更改uitextfield的键盘类型,以使类似这样的操作成为可能:
1 2 3 4 5 | if(user is prompted for numeric input only) [textField setKeyboardType: @"Number Pad"]; if(user is prompted for alphanumeric input) [textField setKeyboardType: @"Default"]; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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; |
您的代码应阅读
1 2 3 4 5 | if(user is prompted for numeric input only) [textField setKeyboardType:UIKeyboardTypeNumberPad]; if(user is prompted for alphanumeric input) [textField setKeyboardType:UIKeyboardTypeDefault]; |
值得注意的是,如果您希望当前焦点所在的字段立即更新键盘类型,则需要多做一个步骤:
1 2 3 4 | // textField is set to a UIKeyboardType other than UIKeyboardTypeEmailAddress [textField setKeyboardType:UIKeyboardTypeEmailAddress]; [textField reloadInputViews]; |
如果没有呼叫
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | typedef enum : NSInteger { UIKeyboardTypeDefault, UIKeyboardTypeASCIICapable, UIKeyboardTypeNumbersAndPunctuation, UIKeyboardTypeURL, UIKeyboardTypeNumberPad, UIKeyboardTypePhonePad, UIKeyboardTypeNamePhonePad, UIKeyboardTypeEmailAddress, UIKeyboardTypeDecimalPad, UIKeyboardTypeTwitter, UIKeyboardTypeWebSearch, UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable } UIKeyboardType; |
是的,您可以,例如:
1 | [textField setKeyboardType:UIKeyboardTypeNumberPad]; |
1 | textFieldView.keyboardType = UIKeyboardType.PhonePad |
这是为了迅速。同样,为了使其正常运行,必须在
使文本字段仅接受字母数字设置此属性
1 | textField.keyboardType = UIKeyboardTypeNamePhonePad; |
1 2 3 4 5 6 7 8 9 10 11 12 | _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; |
斯威夫特4
如果要在满足条件时尝试更改键盘类型,请遵循此步骤。例如:如果要在文本字段的计数为4或5时将键盘类型从"默认"更改为"数字键盘",请执行以下操作:
1 2 3 4 5 6 7 8 9 10 | 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() } |
有一个名为
您要做的是将字符串
您的新代码应如下所示:
1 2 3 4 5 | if(user is prompted for numeric input only) [textField setKeyboardType:UIKeyboardTypeNumberPad]; else if(user is prompted for alphanumeric input) [textField setKeyboardType:UIKeyboardTypeDefault]; |
祝好运!
这是Swift 3的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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 } |
这是一个使用列表中的键盘类型的示例:
1 | textField.keyboardType = .numberPad |
对于想使用
1 2 3 4 5 6 7 8 9 10 11 | 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]]; } |
这是Swift 4.2中的键盘类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | // UIKeyboardType // // Requests that a particular keyboard type be displayed when a text widget // becomes first responder. // Note: Some keyboard/input methods types may not support every variant. // In such cases, the input method will make a best effort to find a close // match to the requested type (e.g. displaying UIKeyboardTypeNumbersAndPunctuation // type if UIKeyboardTypeNumberPad is not supported). // 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 } |
以编程方式更改UITextField键盘类型swift 3.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | lazy var textFieldTF: UITextField = { let textField = UITextField() textField.placeholder ="Name" textField.frame = CGRect(x:38, y: 100, width: 244, height: 30) textField.textAlignment = .center textField.borderStyle = UITextBorderStyle.roundedRect textField.keyboardType = UIKeyboardType.default //keyboard type textField.delegate = self return textField }() override func viewDidLoad() { super.viewDidLoad() view.addSubview(textFieldTF) } |