如何知道iOS中的UITextField是否有空格

时间:2011-11-23 07:42:37

标签: iphone ios ipad nsstring uitextfield

我有一个UITextField,用户可以在其中输入名称并保存。但是,不应允许用户在textFiled中输入空格。

1 - 如何找出用户是否在textFiled中输入了两个空格或填写空格

2 - 我怎么知道textFiled是否只填充空格

编辑 - 仅输入空格(空格)无效

9 个答案:

答案 0 :(得分:97)

您可以“修剪”文本,即删除开头和结尾处的所有空格。如果剩下的只是一个空字符串,那么只输入空格(或没有)。

NSString *rawString = [textField text];
NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSString *trimmed = [rawString stringByTrimmingCharactersInSet:whitespace];
if ([trimmed length] == 0) {
    // Text was empty or only whitespace.
}

如果你想检查是否有空格(文本中的任何地方),你可以这样做:

NSRange range = [rawString rangeOfCharacterFromSet:whitespace];
if (range.location != NSNotFound) {
    // There is whitespace.
}

如果您想阻止用户进入空白区域,请参阅@ Hanon的解决方案。

答案 1 :(得分:13)

如果你真的想“限制”用户输入空格

您可以在UITextFieldDelegate

中实现以下方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range     replacementString:(NSString *)string { 

    NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: string];
    NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet];
    if  ([resultingString rangeOfCharacterFromSet:whitespaceSet].location == NSNotFound)      {
        return YES;
    }  else  {
        return NO;
    }
 }

如果用户在字段中输入空格,则当前文本

没有变化

答案 2 :(得分:6)

使用以下代码行

NSString *str_test = @"Example ";
NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet];
if([str_test rangeOfCharacterFromSet:whitespaceSet].location!=NSNotFound)
{
    NSLog(@"Found");
}

如果您想限制用户使用以下代码

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

答案 3 :(得分:3)

UPD: Swift 2.0支持

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    let whitespaceSet = NSCharacterSet.whitespaceCharacterSet()
    let range = string.rangeOfCharacterFromSet(whitespaceSet)
    if let _ = range {
        return false
    }
    else {
        return true
    }
}

答案 4 :(得分:1)

我有一个相同的条件,不允许用户输入空白字段

这是我的代码和检查声明

- (IBAction)acceptButtonClicked:(UIButton *)sender {
if ([self textFieldBlankorNot:fullNametext]) {
        fullNametext.text=@"na";
    }
// saving value to dictionary and sending to server

}

-(BOOL)textFieldBlankorNot:(UITextField *)textfield{
    NSString *rawString = [textfield text];
    NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
    NSString *trimmed = [rawString stringByTrimmingCharactersInSet:whitespace];
    if ([trimmed length] == 0)
        return YES;
    else
        return NO;
}

答案 5 :(得分:1)

Heres Swift 3版

let whitespaceSet = NSCharacterSet.whitespaces
let range = string.rangeOfCharacter(from: whitespaceSet)
if let _ = range {
    return false
}
else {
    return true
}

答案 6 :(得分:0)

<@> @ Hanon的答案非常简洁,但我需要的是至少允许1个空格,所以基于Hanon的解决方案我做了这个:

我声明了一个名为whitespaceCount的局部变量来保存空格的计数。 希望这有助于任何人!

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range     replacementString:(NSString *)string 
{ 
    NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet];

    if ([string rangeOfCharacterFromSet:whitespaceSet].location != NSNotFound) 
    {
        whitespaceCount++;
        if (whitespaceCount > 1) 
        {
            return NO;
        }
    }
    else 
    {
        whitespaceCount = 0;
        return YES;
    }
}

答案 7 :(得分:0)

以下是我使用stringByReplacingOccurrencesOfString所做的事情。

- (BOOL)validateFields
 {
      NSString *temp = [textField.text stringByReplacingOccurrencesOfString:@" "
                                                          withString:@""
                                                             options:NSLiteralSearch
                                                               range:NSMakeRange(0, textField.text.length)];

      if ([temp length] == 0) {
          // Alert view with message @"Please enter something."
          return NO;
      }
 }

答案 8 :(得分:0)

在Swift中,

如果要限制用户,可以使用contains()

例如,

if userTextField.text!.contains(" "){
//your code here.....
}