当用户按下UITextField的空格键时,如何以编程方式打开键盘上的shift键(以便下一个字符为大写)?
此外,我不希望文本字段中有任何空格,以便用户能够输入如下条目:“ThisIsATest”
我目前使用以下内容来检测空格键是否被按下,并返回false以避免空格,但我不知道如何切换shift键:
// check if string in UITextField is a space
if (string == " "){
// do not return a space
return false
}
答案 0 :(得分:3)
您需要设置textField的autoCapitalizationType。根据您的要求,您需要设置Words
来自Docs:
讨论此属性确定自动按下Shift键的时间,从而使键入的字符成为资本 信件。此属性的默认值为 UITextAutocapitalizationTypeSentences。
<强> SWIFT 强>
enum UITextAutocapitalizationType : Int {
case None
case Words
case Sentences
case AllCharacters
}
常量(适用于所有人:适用于iOS 2.0及更高版本。)
None
:不要自动大写任何文本。
Words
:自动将每个单词的第一个字母大写。
Sentences
:自动将每个句子的第一个字母大写。
AllCharacters
:自动将所有字符大写。
目标C
typedef enum : NSInteger {
UITextAutocapitalizationTypeNone,
UITextAutocapitalizationTypeWords,
UITextAutocapitalizationTypeSentences,
UITextAutocapitalizationTypeAllCharacters,
} UITextAutocapitalizationType;
常量(适用于所有人:适用于iOS 2.0及更高版本。)
UITextAutocapitalizationTypeNone
:不要自动大写任何文本。
UITextAutocapitalizationTypeWords
:自动将每个单词的第一个字母大写。
UITextAutocapitalizationTypeSentences
:自动将每个句子的第一个字母大写。
UITextAutocapitalizationTypeAllCharacters
:自动将所有字符大写。
就像:
<强> SWIFT 强>
textField.autocapitalizationType = UITextAutocapitalizationType.Words
目标C
textField.autocapitalizationType = UITextAutocapitalizationTypeWords;
享受....
答案 1 :(得分:0)
我认为问题是
string == @&#34; &#34;是错的。
字符串的等同性使用:
完成[string isEqualToString:@&#34; &#34;]
我希望它会有所帮助:)
答案 2 :(得分:0)
更新的答案
经过测试,在每个单词后按空格键时会打印“ThisIsATest”。我对Swift不太好,所以这个片段在Obj-C中。这很简单。请务必在代码或IB中将textField的委托设置为ViewController。
#import "ViewController.h"
@interface ViewController () <UITextFieldDelegate>
@property (nonatomic, assign) BOOL shouldCapitalizeNextChar;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.shouldCapitalizeNextChar = YES;
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([string isEqualToString:@" "]) {
self.shouldCapitalizeNextChar = YES;
return NO;
}
if (self.shouldCapitalizeNextChar) {
NSString *capitalizedChar = [string capitalizedString];
textField.text = [textField.text stringByAppendingString:capitalizedChar];
self.shouldCapitalizeNextChar = NO;
return NO;
}
return YES;
}
@end
和以前一样,这不适用于复制和粘贴的文本。但它应该有助于你理解。
原始回答
UITextField知道如何对每个单词进行自动调整,如果你想在你的应用中使用它,那就是:
的OBJ-C
textField.autocapitalizationType = UITextAutocapitalizationTypeWords;
夫特
textField.autocapitalizationType = UITextAutocapitalizationType.Words
请注意,这只是对用户的建议,他/她可以通过按shift来覆盖它。如果使用“粘贴”选项,它将无法工作。