在UITextField中按空格键时打开Shift键

时间:2015-05-25 09:02:31

标签: ios swift uitextfield

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

此外,我不希望文本字段中有任何空格,以便用户能够输入如下条目:“ThisIsATest”

我目前使用以下内容来检测空格键是否被按下,并返回false以避免空格,但我不知道如何切换shift键:

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

3 个答案:

答案 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来覆盖它。如果使用“粘贴”选项,它将无法工作。