2015-05-25 45 views
1

当用户按下UITextField的空格键时,如何以编程方式打开键盘上的shift键(以使下一个字符为大写)?在UITextField中按下空格键时打开Shift键

另外,我不希望在文本字段中的任何空间,使得用户能够输入这样的条目:“ThisIsATest”

我目前使用下面如果按下空格键检测,并返回false,以避免空间,但我不知道如何切换shift键:

// check if string in UITextField is a space 
if (string == " "){ 
// do not return a space 
return false 
} 

回答

0

UPDATED ANSWER

这是经过测试并在每个单词后按空格键时打印“ThisIsATest”。我用Swift不太好,所以这个片段在Obj-C中。这非常简单。一定要将你的textField的委托设置为代码或IB中的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知道如何autocapitalize每个字,如果这是你在你的应用程序想要的只是使用:

对象 -

textField.autocapitalizationType = UITextAutocapitalizationTypeWords; 

斯威夫特

textField.autocapitalizationType = UITextAutocapitalizationType.Words 

请注意t他只是对用户的建议,他/她可以通过按shift键来覆盖它。如果使用粘贴选项,它也不起作用。

+0

我认为UITextField基于空格的添加(从空格键)来识别单词,对于这种情况,空格键是禁用的,所以我能想到的唯一方法是能够打开我不介意用户是否决定通过再次按Shift来覆盖它。 – spigen

+0

@spigen查看更新后的答案。它没有点亮shift键,但它起作用。 – NKorotkov

0

我认为这个问题是

字符串== @”“是错误的。

平等字符串中使用完成:

[字符串isEqualToString:@”“]

我希望这将有助于:)

+0

这对于Objective-C来说是正确的,但是在Swift中,字符串与'=='进行比较。 –

+0

oooppsss,我的不好:( – Ankush

3

你需要设置一个文本框的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; 

享受....

相关问题