以编程方式更改 UITextField 键盘类型

是否可以通过编程方式更改 uitextfield 的键盘类型,以便实现以下功能:

if(user is prompted for numeric input only)
[textField setKeyboardType: @"Number Pad"];


if(user is prompted for alphanumeric input)
[textField setKeyboardType: @"Default"];
173227 次浏览

对于 UITextField,有一个 keyboardType属性:

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 setKeyboardType:UIKeyboardTypeNumberPad];

有一个属性称为 keyboardType。 您需要做的是将字符串 @"Number Pad@"Default替换为 UIKeyboardTypeNumberPadUIKeyboardTypeDefault

您的新代码应该如下所示:

if(user is prompted for numeric input only)
[textField setKeyboardType:UIKeyboardTypeNumberPad];


else if(user is prompted for alphanumeric input)
[textField setKeyboardType:UIKeyboardTypeDefault];

祝你好运!

使文本字段只接受 alpha 数字设置此属性

textField.keyboardType = UIKeyboardTypeNamePhonePad;

值得注意的是,如果你想让一个 目前的焦点字段立即更新键盘类型,还有一个额外的步骤:

// 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;

对于那些想使用 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]];
}
_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;
    textFieldView.keyboardType = UIKeyboardType.PhonePad

这是为了迅速。也为了这个功能正常运行,它必须设置后的 textFieldView.delegate = self

这是 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

以编程方式更改 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)
}

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 to work
} else {
textField.keyboardType = .default
textField.reloadInputViews()
}

以下是 Swift 4.2中的键盘类型

// 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
}