2013-05-06 78 views
0

我有4个文本字段,我想同时放置两个限制。一个是,用户应该只能输入大写字母,最大字符数限制为2。我给这家代码如下: -限制用户输入字符,并将每个输入的字母转换为大写字母在ios

- (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。请提出解决这个问题的方法。

回答

2

你手动更新您的文本框的文本,然后再送回来YES(然后追加字符第二次)。然后,你usingthe新文本与替换字符串比较它两(其中,然后再追加你的角色)......

试试这个:

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

的感谢!队友现在工作正常。谢谢你解释我的错误。 – Shikhar 2013-05-06 11:01:44

+0

如果我也想限制用户输入特殊字符,那么我可以在这里设置什么样的条件。 – Shikhar 2013-05-06 11:06:17

+0

你可以使用一个反转的NSCharacterSet。例如,如果你不想要除大写以外的任何字符,你可以在上面加上'NSString * result':if([string componentsSeparatedByCharactersInSet:[[NSCharacterSet capitalizedLetterCharacterSet] invertedSet]]。count> 1)return NO; – elslooo 2013-05-06 12:43:08

0

为了限制的字符数,并在您的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; 
      } 
0

请尝试使用这一个。 ..它可以帮助你

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

登录UITextFieldTextDidChangeNotification在这里做

判断
[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(textChanged:) 
               name:UITextFieldTextDidChangeNotification 
              object:YOUR_TEXT_FIELD]; 

-(void)textChanged:(NSNotification *)notif { 
    //to do your logic 
} 
相关问题