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

这是我使用的一种不同的方法,它在以下方面进行:

  1. 一旦input字符,就执行大写操作
  2. 捕获用户禁用大写字母锁的情况,即使它的文本字段被设置为自动大写
  3. 允许轻松编辑
  4. 适用于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; } } } 

希望这可以帮助。