2009-08-20 64 views
7

我想限制用户输入UITextField中的空间。为此我使用此代码iPhone限制用户输入文本框中的空间

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    if (string == @" "){ 
     UIAlertView *error = [[UIAlertView alloc] initWithTitle:@"Error" message:@"You have entered wrong input" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
     [error show]; 
     return NO; 
    } 
    else { 
     return YES; 
    } 
} 

但它不工作....它有什么不对?

回答

10

问题是

string == @" " 

是错误的。字符串的平等使用:

[string isEqualToString:@" "] 

:)。

+2

虽然这是真的,它不会告诉你,替换字符串是否包含空格,它只会告诉你替换字符串是否是单个空格。 – 2009-08-20 07:16:46

+0

@crackity_jones这是真的,但凭经验来看,它工作得很好。 – 2013-04-08 00:40:13

+0

它工作,除非有人粘贴包含空格的文本 – budidino 2017-01-16 06:52:52

2

试试这个(在设置此 - (BOOL)文本框:(*的UITextField)文本框shouldChangeCharactersInRange:(NSRange)范围replacementString:(的NSString *)字符串):

NSArray *escapeChars = [NSArray arrayWithObjects:@" ", nil]; 

NSArray *replaceChars = [NSArray arrayWithObjects:@"",nil]; 
int len = [escapeChars count]; 
NSMutableString *temp = [[textField text] mutableCopy]; 
for(int i = 0; i < len; i++) { 
    [temp replaceOccurrencesOfString: [escapeChars objectAtIndex:i] withString:[replaceChars objectAtIndex:i] options:NSLiteralSearch range:NSMakeRange(0, [temp length])]; 
} 
[textField setText:temp]; 
return TRUE; 
1
string == @" " 

是不是那只是比较每个string@" "的地址?那不是你想要做的比较。

你也想阻止他们输入一个只是一个空格的字符串吗?如果是这样,那么你需要将==更改为适当的字符串比较,你很好。如果不是,并且您想要防止输入字符串中的所有空格,那么您需要一个字符串匹配器

9

这将搜索以查看您的替换字符串是否包含空格,如果有,则会抛出错误消息,它返回YES。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSRange spaceRange = [string rangeOfString:@" "]; 
    if (spaceRange.location != NSNotFound) 
    { 
     UIAlertView *error = [[UIAlertView alloc] initWithTitle:@"Error" message:@"You have entered wrong input" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
     [error show]; 
     return NO; 
    } else { 
     return YES; 
    } 
} 
4

目前的答案是这样的:

设置视图控制器符合UITextFieldDelegate(应该是这个样子靠近你的代码的顶部):

@interface YourViewController() <UITextFieldDelegate> 

... 

@ end 
@ implementation YourViewController 

... 

@end 

然后使textfield使用视图控制器作为它的委托。进入界面生成器,控制点击文本框并拖动一行到视图控制器下方的栏上的黄色圆圈,然后从弹出的菜单中选择“委托”。您也可以通过在创建下一段中介绍的属性后设置委托来以代码形式执行此操作。用self.yourTextField.delegate = self这样做;在适当的地方,可能在viewDidLoad中。

同时将textField设置为视图控制器上的属性。通过转到界面构建器,并在助理编辑器中打开其代码,并控制从Interface Builder中的文本字段中单击并拖动到列出属性的代码中的位置(@interface和第一个@结束)。然后在弹出的窗口中输入一个名称。在下面的代码中,我使用“yourTextField”作为例子。(如果您确定这是唯一将使用视图控制器作为其代表的文本字段,则可以跳过本节以及下面代码中的外部if循环),但最好事先计划未来的可能性)

然后你就可以禁止从空间即使使用下面的委托方法输入:

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField == self.yourTextField) 
    { 
     if ([string isEqualToString:@" "]) 
     { 
      return NO; 
     } 
    } 
    return YES; 
} 
0

下面是我在用的密码和确认密码

PrefixHeader.pch文件中添加以下

#define NONACCEPTABLE_PASSWORD_CHARACTERS @" " 

并在下面的代码中使用。

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


    if (textField==passwordTF || textField==confirmPasswordTF) { 
     NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString:NONACCEPTABLE_PASSWORD_CHARACTERS]; 

     NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; 

     return [string isEqualToString:filtered]; 
    } 

    return YES; 
} 
相关问题