Programmatically change UITextField Keyboard type

前端 未结 12 1264
不知归路
不知归路 2020-11-28 19:28

Is it possible to programmatically change the keyboard type of a uitextfield so that something like this would be possible:

if(user is prompted for numeric i         


        
相关标签:
12条回答
  • 2020-11-28 19:44

    There is a keyboardType property for a 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];
    
    0 讨论(0)
  • 2020-11-28 19:44

    Here are the type of keyboard in 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
    }
    
    0 讨论(0)
  • 2020-11-28 19:50

    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.

    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!

    0 讨论(0)
  • 2020-11-28 19:51
    _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;
    
    0 讨论(0)
  • 2020-11-28 19:57

    Programmatically change UITextField Keyboard type 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)
    }
    
    0 讨论(0)
  • 2020-11-28 19:58

    for people who want to use UIDatePicker as input:

    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]];
    }
    
    0 讨论(0)
提交回复
热议问题