Программно изменить тип клавиатуры UITextField
можно ли программно изменить тип клавиатуры uitextfield, чтобы было возможно что-то вроде этого:
if(user is prompted for numeric input only)
[textField setKeyboardType: @"Number Pad"];
if(user is prompted for alphanumeric input)
[textField setKeyboardType: @"Default"];
11 ответов:
есть
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;
ваш код следует читать:
if(user is prompted for numeric input only) [textField setKeyboardType:UIKeyboardTypeNumberPad]; if(user is prompted for alphanumeric input) [textField setKeyboardType:UIKeyboardTypeDefault];
стоит отметить, что если вы хотите поле для немедленного обновления типа клавиатуры, есть один дополнительный шаг:
// textField is set to a UIKeyboardType other than UIKeyboardTypeEmailAddress [textField setKeyboardType:UIKeyboardTypeEmailAddress]; [textField reloadInputViews];
без вызова
reloadInputViews
, клавиатура не изменится, пока выбранное поле (первый ответчик) теряет и восстанавливает фокус.полный список
UIKeyboardType
значения можно посмотреть здесь, или:typedef enum : NSInteger { UIKeyboardTypeDefault, UIKeyboardTypeASCIICapable, UIKeyboardTypeNumbersAndPunctuation, UIKeyboardTypeURL, UIKeyboardTypeNumberPad, UIKeyboardTypePhonePad, UIKeyboardTypeNamePhonePad, UIKeyboardTypeEmailAddress, UIKeyboardTypeDecimalPad, UIKeyboardTypeTwitter, UIKeyboardTypeWebSearch, UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable } UIKeyboardType;
textFieldView.keyboardType = UIKeyboardType.PhonePad
Это для swift. Также для того, чтобы это функционировало должным образом, он должен быть установлен после
textFieldView.delegate = self
чтобы текстовое поле принимало только буквенно-числовые значения, установите это свойство
textField.keyboardType = UIKeyboardTypeNamePhonePad;
_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;
есть свойство для этого называется
keyboardType
. Что вы хотите сделать, это заменить, где есть строки@"Number Pad
и@"Default
СUIKeyboardTypeNumberPad
иUIKeyboardTypeDefault
.ваш новый код должен выглядеть примерно так:
if(user is prompted for numeric input only) [textField setKeyboardType:UIKeyboardTypeNumberPad]; else if(user is prompted for alphanumeric input) [textField setKeyboardType:UIKeyboardTypeDefault];
Удачи!
для людей, которые хотят использовать
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]]; }
Это
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 }
Это пример использования типа клавиатуры из списка:
textField.keyboardType = .numberPad
Swift 4
Если вы пытаетесь изменить тип клавиатуры при выполнении условия, выполните следующие действия. Например: если мы хотим изменить тип клавиатуры с по умолчанию до Клавиатуры когда количество текстового поля равно 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 work } else { textField.keyboardType = .default textField.reloadInputViews() }
программно изменить тип клавиатуры UITextField swift 3.0
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) }