iPhone限制用户在文本字段中输入空格

时间:2009-08-20 06:33:47

标签: iphone objective-c user-interface uitextfield

我想限制用户在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;
    }
}

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

6 个答案:

答案 0 :(得分:10)

问题是

string == @" "

错了。字符串的相等性使用:

完成
[string isEqualToString:@" "]

:)

答案 1 :(得分: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;
    }
}

答案 2 :(得分:4)

目前的答案是:

将视图控制器设置为符合UITextFieldDelegate(在代码顶部附近应该看起来像这样):

@interface YourViewController () <UITextFieldDelegate>

...

@ end
@ implementation YourViewController

...

@end

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

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

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

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

答案 3 :(得分: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;

答案 4 :(得分:1)

string == @" "

这不仅仅是比较string@" "中的每一个的地址吗?那不是你想做的比较。

您是否也希望阻止它们输入只是空格的字符串?如果是这样,那么你需要将==更改为正确的字符串比较,你就可以了。如果没有,并且您想要阻止输入字符串中的所有空格,那么您需要一个字符串匹配器

答案 5 :(得分:0)

以下是我用于密码和确认密码的内容

Import-Module ActiveDirectory $UserList = Import-CSV -Path C:\Export\CreateUsers.csv $targetOU = 'OU=USERS,OU=TEST,DC=contoso,DC=local' $upnDomain = 'contoso.local' $Path = "C:\Export\UserOutput.csv" foreach ($Person in $UserList) { $Password = "{0}{1}{2}" -f $Person.Firstname.Substring(0, 2), (Get-Date).ToString("ddMM"), $Person.Lastname.Substring(0, 2) $useritems = @{ GivenName = $Person.Firstname Surname = $Person.LastName Department = "TEST" AccountPassword = ConvertTo-SecureString -String $Password -AsPlainText -force ChangePasswordAtLogon = $false Enabled = $true Description = "TEST" DisplayName = "$($Person.Firstname) $($Person.Lastname)" Name = "$($Person.Firstname) $($Person.Lastname)" SamAccountName = $Person.Sam Office = "XXX" employeeID = $Person.TempEmployeeID title = "XXX" initials = $Person.initials company = "Contoso" EmailAddress = $Person.mail Manager = "XXXX" IPPhone = $Person.MobilePhone.Replace("^0","") EmployeeID = $Person.Sam.Replace("SYS","") Pager = $Person.Sam.Replace("SYS","") UserPrincipalName = $Person.Sam+$upnDomain } New-ADUser @useritems -Path $targetOU Add-Adgroupmember -identity "Test_Group" -Members $Person.Sam Add-Content -Path $Path -Value "Username:,$Username,Password:,$Password" } 文件中添加以下

PrefixHeader.pch

在下面的代码中使用。

#define NONACCEPTABLE_PASSWORD_CHARACTERS @" "