UItextfield中的大写字符
我有一个关于iOS UIKeyboard
的问题。
我有一个UITextField
,我会只有大写字母的keyboard
。
我使用storyboard
并试图将Cpitalization
设置为“ All characters
”到UITextField properties
。
但是这不能解决我的问题…有什么build议吗?
将您的文本字段typesautocapitalizationType
设置为UITextField上的UITextAutocapitalizationTypeAllCharacters
self.yourTexField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
打电话给代表
//委托方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSRange lowercaseCharRange = [string rangeOfCharacterFromSet:[NSCharacterSet lowercaseLetterCharacterSet]]; if (lowercaseCharRange.location != NSNotFound) { textField.text = [textField.text stringByReplacingCharactersInRange:range withString:[string uppercaseString]]; return NO; } return YES; }
对于那些寻找快速版本的人:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { textField.text = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string.uppercaseString) return false }
我没有任何改变Capitalization: All Characters
属性的运气。
语法是现在
Swift 2
textField.autocapitalizationType = UITextAutocapitalizationType.AllCharacters
Swift 3
textField.autocapitalizationType = .allCharacters
将UITextField
属性autocapitalizationType
设置为UITextAutocapitalizationTypeAllCharacters
。 这将使所有字符以大写字母出现。 也请访问此处以查找有关textfields的更多信息
我遇到的一个问题是如果你尝试设置textfield.text
,你会失去光标位置。 所以如果用户试图编辑文本的中间, 光标会跳到最后 。
这里是我的Swift解决scheme,仍然使用UITextFieldDelegate
:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { if textField == textFieldToUppercase { if string == "" { // User presses backspace textField.deleteBackward() } else { // User presses a key or pastes textField.insertText(string.uppercaseString) } // Do not let specified text range to be changed return false } return true }
你也可以使用这个代码。
-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ // Uppercase for string which you need textField.text = [textField.text stringByReplacingCharactersInRange:range withString:[string uppercaseString]]; // return NO because You have already done it in above code return NO; }
这是我使用的一种不同的方法,它在以下方面进行:
- 一旦input字符,就执行大写操作
- 捕获用户禁用大写字母锁的情况,即使它的文本字段被设置为自动大写
- 允许轻松编辑
- 适用于Swift 2.2
首先,注册一个通知,以便在文本字段中发生任何更改时更新。
textField.addTarget(self, action: #selector(YourClassName.textFieldDidChange(_:)), forControlEvents: UIControlEvents.EditingChanged)
然后,实现textFieldDidChange
。
func textFieldDidChange(textField: UITextField) { textField.text = textField.text?.uppercaseString }
我select这样做是为了避免用户看到一些大写字母的不平衡的经历,但是一旦他们移动到下一个字符就会改变。
最简单的方法是实现文本字段的编辑更改方法,并将文本字段的文本值设置为input文本的大写字母表示。
@property (nonatomic, strong) IBOutlet UITextField *yourTextfield // add target in code or use interface builder [self.yourTextField addTarget:self action:@selector(uppercaseTextField) forControlEvents:UIControlEventEditingChanged]; - (IBAction)uppercaseTextField:(UITextField*)textField { textField.text = [textField.text uppercaseString]; }
也许这里的答案有点晚了,但是因为我有一个工作解决scheme,有人可能会觉得它有用。
那么,在下面的文本字段委托方法中,检查新string是否包含任何小写字符。 如果是,那么:
- 将刚键入的字符追加到文本字段的文本中。
- 使所有文本字段的文本大写。
- 确保该方法返回
false
。
否则,只需返回true
,让方法按预期工作。
这是它的实现:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { var returnValue = true let lowercaseRange = string.rangeOfCharacter(from: CharacterSet.lowercaseLetters) if let _ = lowercaseRange?.isEmpty { returnValue = false } if !returnValue { textField.text = (textField.text! + string).uppercased() } return returnValue }
以上对我来说是完美的,对于文本查看来说也是类似的实现。
希望能帮助到你!
使用下面的文本字段委托方法可以完成:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { //--- Making uppercase ---// if (textField == yourTextField ) { NSRange lowercaseCharRange; lowercaseCharRange = [string rangeOfCharacterFromSet:[NSCharacterSet lowercaseLetterCharacterSet]]; if (lowercaseCharRange.location != NSNotFound) { textField.text = [textField.text stringByReplacingCharactersInRange:range withString:[string uppercaseString]]; return NO; } } }
希望这可以帮助。