【问题标题】:How to know if a UITextField in iOS has blank spaces如何知道iOS中的UITextField是否有空格
【发布时间】:2012-01-04 12:55:32
【问题描述】:

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

1 - 我怎样才能知道,如果用户在 textFiled 中输入了两个空格或完整的空格

2 - 我如何知道 textFiled 是否仅填充空格

edit - 只输入空格(空格)是无效的

【问题讨论】:

  • 需要澄清一下:用户是根本不允许输入any空格,还是只能输入only空格无效?即字符串"this is a test"是否有效?

标签: iphone ios ipad nsstring uitextfield


【解决方案1】:

您可以“修剪”文本,即删除开头和结尾的所有空格。如果剩下的是空字符串,则只输入空格(或不输入任何内容)。

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 的解决方案。

【讨论】:

  • 哇..这个工作的家伙......太棒了。中肯的答案.....你得到了25这个。 15+10..... ;) 非常感谢
  • DarkDust 我从你的回答中学到了。(+1)如果你在 if 块之后/之外记录它,为什么修剪的字符串没有按预期记录 [NSString stringWithString:@"space"]?
  • @Maudicus:修剪意味着仅从开头和结尾删除。中间的任何空格都会被保留。
【解决方案2】:

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

你可以在 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;
    }
 }

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

【讨论】:

    【解决方案3】:

    使用以下代码行

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

    【讨论】:

    • 这将找到 any 空格(例如也在 "A title" 中)。发帖人想知道字符串是否是only 空格(例如" ")。
    • 感谢 narayana 的回答......我在发布问题之前尝试了这种方法,但没有成功......也为你的回答 +1
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      我有同样的情况不允许用户输入空白字段

      这是我的代码和检查语句

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

      【讨论】:

        【解决方案6】:

        这是 Swift 3 版本

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

        【讨论】:

          【解决方案7】:

          这是我使用 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】:

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

            【讨论】:

              【解决方案9】:

              在 Swift 中,

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

              例如,

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-04-28
                • 1970-01-01
                • 2019-12-20
                相关资源
                最近更新 更多