7

我想限制用户在 UITextField 中输入空间。为此我使用此代码

- (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;
    }
}

但它不起作用....有什么问题?

4

6 回答 6

10

问题是

string == @" "

是错的。字符串的相等是使用以下方法完成的:

[string isEqualToString:@" "]

:)。

于 2009-08-20T06:38:26.807 回答
10

这将搜索您的替换字符串是否包含空格,如果包含则将错误消息向上抛出,如果不包含则返回 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;
    }
}
于 2009-08-20T06:56:23.057 回答
3

目前的答案是这样的:

将 View Controller 设置为符合 UITextFieldDelegate(在代码顶部附近应该看起来像这样):

@interface YourViewController () <UITextFieldDelegate>

...

@ end
@ implementation YourViewController

...

@end

然后让文本字段使用 View Controller 作为其委托。为此,请转到 Interface Builder,控制单击文本字段并将一条线拖到 View Controller 下方栏上的黄色圆圈中,然后从弹出的菜单中选择“delegate”。您也可以通过在下一段中描述的属性之后设置委托来在代码中执行此操作。这样做 self.yourTextField.delegate = self; 在适当的位置,可能在 viewDidLoad 中。

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

然后,您甚至可以使用以下委托方法禁止输入空格:

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == self.yourTextField)
    {
        if ([string isEqualToString:@" "] )
        {
            return NO;
        }
    }
    return YES;
}
于 2014-03-18T22:23:59.887 回答
2

试试这个(在你的 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 中设置这个):

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;
于 2009-08-20T06:39:01.250 回答
1
string == @" "

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

您还想阻止他们输入一个只是空格的字符串吗?如果是这样,那么您需要将其更改==为适当的字符串比较,您就可以开始了。如果不是,并且您想阻止输入字符串中的所有空格,那么您需要一个字符串匹配器

于 2009-08-20T06:41:22.057 回答
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;
}
于 2017-04-16T05:22:04.520 回答