2011-04-29 65 views
0

是否有一种方法只允许用户在UITextField中输入一个单词?如果是这样,怎么样?限制用户只在UITextField中输入一个单词

下面是我使用的当前代码:

-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 

_disallowedCharacters = [NSCharacterSet whitespaceCharacterSet]; 

for(int i = 0; i < [_searchBox.text length]; i++){ 
    unichar c = [_searchBox.text characterAtIndex:i]; 
    if (![_disallowedCharacters characterIsMember:c]) 
    { 
     return NO; 
    } 
} 
return YES; 
} 
+0

你是什么意思的“一个字”?在某些语言中,空格不是单词分隔符。 – 2011-04-29 21:52:50

回答

4

使用UITextFieldDelegate协议:

- (BOOL) textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)textEntered 
{ 
    for (int i = 0; i < [textEntered length]; i++) 
    { 
     unichar c = [textEntered characterAtIndex:i]; 
     if ([disallowedCharacters characterIsMember:c]) 
     { 
      return NO; 
     } 
    } 
    return YES; 
} 

其中disallowedCharacters是包含不应被键盘所接受的字符的NSCharacterSet,即空格,标点符号,数字等:

self.disallowedCharacters = [NSCharacterSet characterSetWithCharactersInString:@" ,.123"]; 
+0

谢谢,我将如何定义这个characterSet? – locoboy 2011-04-29 20:06:19

+0

@ cfarm54:查看我发布的第二个代码示例。在头文件中声明一个实例变量以匹配它; '@ property'和'@ synthesize',然后在'viewDidLoad'中定义它。 – 2011-04-29 20:09:06

+0

@Evan有趣。这段代码只允许我输入一个字母。我想只能输入一个单词。 – locoboy 2011-04-29 20:12:05

2

对于字符集(Evan的答案),检查对空格和换行,你可以使用

self.disallowedCharacters = [NSCharacterSet whitespaceAndNewlineCharacterSet]; 

如果你想核对除了空格和换行字符,创建一个mutableCopy并添加任何你想它:

NSMutableCharacterSet *set = [[NSCharacterSet whitespaceAndNewlineCharacterSet] mutableCopy]; 
[set formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]]; 
[set formUnionWithCharacterSet:[NSCharacterSet symbolCharacterSet]; 
[set addCharactersInString:@"whatever you want"]; 
... 
self.disallowedCharacters = [[set copy] autorelease]; 
[set release]; 

NSCharacterSet docs有一个很好的可用字符集的概述。

+0

这似乎应该可以工作,但我仍然只能键入一个字母,然后停止让我键入。任何线索为什么会发生这种情况? – locoboy 2011-04-29 21:10:11

+0

查看evan的评论,你的返回值被交换。 – kevboh 2011-04-30 17:02:29