我想覆盖按下键的事件来强制它,即使按下大写键,结果输出仍然是小写。
答案 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
}