如何强制UITextField仅支持小写字符?

时间:2014-09-18 01:21:46

标签: objective-c uitextfield

我想覆盖按下键的事件来强制它,即使按下大写键,结果输出仍然是小写。

2 个答案:

答案 0 :(得分:6)

这应该有效(你还应该设置textfield.autocapitalizationType = UITextAutocapitalizationTypeNone)

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if (textField==_usernameTextfield || textField==_emailTextfield) {
        NSRange lowercaseCharRange;
        lowercaseCharRange = [string rangeOfCharacterFromSet:[NSCharacterSet uppercaseLetterCharacterSet]];

        if (lowercaseCharRange.location != NSNotFound) {
            // some uppercase chars where found, need to replace

            UITextPosition *beginning = textField.beginningOfDocument;
            UITextPosition *start = [textField positionFromPosition:beginning offset:range.location];
            // new cursor location after insert/paste/typing
            NSInteger cursorOffset = [textField offsetFromPosition:beginning toPosition:start] + string.length;

            // convert whole text to lowercase and update the textfield
            textField.text = [textField.text stringByReplacingCharactersInRange:range
                                                                 withString:[string lowercaseString]];

            // now reposition the cursor
            UITextPosition *newCursorPosition = [textField positionFromPosition:textField.beginningOfDocument offset:cursorOffset];
            UITextRange *newSelectedRange = [textField textRangeFromPosition:newCursorPosition toPosition:newCursorPosition];
            [textField setSelectedTextRange:newSelectedRange];
            return NO;
        }
    }
    return YES;
}

答案 1 :(得分:4)

解决方案是为textFieldDidChange添加选择器:

[self addTarget:self
                  action:@selector(textFieldDidChange:)
        forControlEvents:UIControlEventEditingChanged];

textFieldDidChange事件中,添加以下内容:

- (void)textFieldDidChange:(UITextField*)textField {
    textField.text = [textField.text lowercaseString];
}

或者您可以使用界面生成器@IBAction 编辑已更改

Swift 2版本:

@IBAction func textChanged(sender: UITextField) {
    sender.text = sender.text?.lowercaseString
}