प्रोग्रामेटिक रूप से UITextField कीबोर्ड प्रकार बदलें


175

क्या किसी uitextfield के कीबोर्ड प्रकार को प्रोग्रामेटिक रूप से बदलना संभव है ताकि ऐसा कुछ संभव हो सके:

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

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

3
मैं आपको सुझाव doozy
दूंगा

जवाबों:


371

एक के 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];

7
ध्यान दें कि यह एक चतुर / विक्षिप्त उपयोगकर्ता को अन्य वर्णों में प्रवेश करने से नहीं रोकता है। उदाहरण के लिए: यदि इमोजी कीबोर्ड आपके नंबर फ़ील्ड को टैप करने से पहले सक्रिय था , तो वे इसमें स्माइली चेहरे टाइप करने के लिए स्वतंत्र हैं। इस बारे में आप कुछ भी नहीं कर सकते हैं, और यह निश्चित रूप से ऐप्पल का बग है, लेकिन आपको यह सुनिश्चित करना चाहिए कि यदि आप एक नंबर फ़ील्ड में गैर-संख्या प्राप्त करते हैं तो आपका कोड क्रैश नहीं होता है।
स्टीवन फिशर

आज पता चला, यह UITextInputTraitsप्रोटोकॉल की एक संपत्ति है , जिसे UITextFieldअपनाता है।
रौनक

1
क्या वेबव्यू में लोड किए गए HTML इनपुट फ़ील्ड के लिए कीबोर्ड प्रकार को UIKeyboardTypeNumbersAndPunctuation के रूप में बदलना संभव है?
श्रीनि

मैंने संबंधित कीबोर्ड प्रकार के साथ एक परियोजना में यूटेक्स्टफील्ड प्रोग्रामेटिक रूप से बनाया। यह कुछ दिन पहले जगा है। लेकिन अब यह काम नहीं किया है। वास्तविक कारण नहीं मिल रहा है
राहुल फाटे

78

यह ध्यान देने योग्य है कि यदि आप कीबोर्ड प्रकार को तुरंत अपडेट करने के लिए वर्तमान में केंद्रित फ़ील्ड चाहते हैं , तो एक अतिरिक्त कदम है:

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

यह जानने के लिए उपयोगी जानकारी है- मैं वर्तमान में केंद्रित क्षेत्र इनपुट परिवर्तन के बारे में जानकारी निकालने के लिए एक प्रश्नोत्तर शैली के स्व-उत्तर वाले प्रश्न करने का सुझाव दूंगा (जब मुझे यह उत्तर मिला तो मैं इसकी तलाश कर रहा था)
Stonz2

1
यह भी ध्यान देने योग्य है कि वर्तमान में जिस फ़ोकस पर ध्यान केंद्रित नहीं किया गया है, उस पर reloadInputViews कॉल करना कीबोर्ड के प्रकार को तुरंत नहीं बदलेगा। तो बेहतर कॉल [textfield बनFirstResponder] पहले तो [textField reloadInputViews]
किउलंग

1
यह था [textField reloadInputViews];कि मैं गायब था। धन्यवाद!
इस्लाम प्र।

1
कॉलिंग reloadInputViewsभी bespoke UITextInputकार्यान्वयन के लिए काम करता है ।
पॉल गार्डिनर


9
    textFieldView.keyboardType = UIKeyboardType.PhonePad

यह तेजी के लिए है। इसके अलावा ठीक से काम करने के लिए इसे बाद में सेट किया जाना चाहिएtextFieldView.delegate = self


7

टेक्स्ट फ़ील्ड को स्वीकार करने के लिए अल्फा न्यूमेरिक को केवल इस गुण को सेट करें

textField.keyboardType = UIKeyboardTypeNamePhonePad;

6
_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;

5

स्विफ्ट 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()
 }

2

इसके लिए एक प्रॉपर्टी कहा जाता है 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];

शुभ लाभ!


1

ऐसे लोगों के लिए जो 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]];
}

1

यह UIKeyboardTypesस्विफ्ट 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

0

प्रोग्रामेटिक रूप से UITextField कीबोर्ड प्रकार स्विफ्ट 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)
}

0

यहाँ 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
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.