【问题标题】:Limiting the user to enter the characters and also to convert the each entered letter into capital letter in ios限制用户输入字符并将每个输入的字母转换为 ios 中的大写字母
【发布时间】:2013-05-06 10:30:59
【问题描述】:

我有 4 个文本字段,我想在其中同时设置两个限制。一是用户应该只能输入大写字母,最大字符限制为 2。我的代码如下:-

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

// Below logic is for All 4 Modifer Textfields
// we are restrict the user to enter only max 2 characters in modifier textfields.
if (textField==txt_modifier1 || textField==txt_modifier2 || textField==txt_modifier3 || 
textField==txt_modifier4) {
    textField.text = [textField.text stringByReplacingCharactersInRange:range
                                                             withString:[string 
    uppercaseStringWithLocale:[NSLocale currentLocale]]];
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 2) ? NO : YES;

}
return YES;

}

这不能正常工作,因为它在我输入任何字符时又追加了一个字符,并且也没有将字符数限制为 2。请提出解决此问题的方法。

【问题讨论】:

    标签: iphone ios objective-c text uitextfield


    【解决方案1】:

    您正在手动更新文本字段中的文本,然后将YES 发回(然后再次附加字符)。然后,您使用带有替换字符串的新文本将其与两个进行比较(然后再次附加您的字符)...

    试试这个:

    if (...) {
        NSString *result = [textField.text stringByReplacingCharactersInRange:range
                                                                   withString:string.uppercaseString];
        if (result.length <= 2)
            textField.text = result;
        return NO;
    }
    return YES;
    

    【讨论】:

    • 谢谢!伙计,它现在工作正常。也感谢您解释我的错误。
    • 如果我还想限制用户输入特殊字符,那么我可以在这里设置什么条件。
    • 您可以为此使用倒置的NSCharacterSet。例如,如果您不想要除大写以外的任何字符,则可以将其放在上面NSString *resultif ([string componentsSeparatedByCharactersInSet:[[NSCharacterSet capitalizedLetterCharacterSet] invertedSet]].count &gt; 1) return NO;
    【解决方案2】:

    要在 UITextField 中限制字符数并将其大写,请使用此代码块

         -(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    
                textField.text = [textField.text capitalizedString];
                if(textField.text.length >= 3 && range.length == 0) 
                {
                     return NO; 
                }
                else 
                {
                     return YES;
                }
    

    【讨论】:

      【解决方案3】:

      请尝试使用这个...它可能对你有帮助

        -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
      {
              if([string isEqualToString:[string capitalizedString]])
              {
      
                  NSString *result = [textField.text stringByReplacingCharactersInRange:range
                                                                             withString:string.uppercaseString];
                  if (result.length <= 2)
                      textField.text = result;
                  return NO;
              }
              else
                  return YES;
      }
      

      【讨论】:

        【解决方案4】:

        loginUITextFieldTextDidChangeNotification这里判断

        [[NSNotificationCenter defaultCenter] addObserver:self
                                                  selector:@selector(textChanged:)
                                                      name:UITextFieldTextDidChangeNotification
                                                    object:YOUR_TEXT_FIELD];
        
        -(void)textChanged:(NSNotification *)notif {
            //to do your logic
        }
        

        【讨论】:

          猜你喜欢
          • 2017-12-17
          • 1970-01-01
          • 1970-01-01
          • 2018-06-07
          • 1970-01-01
          • 2015-06-17
          • 1970-01-01
          • 2020-07-05
          • 1970-01-01
          相关资源
          最近更新 更多