2013-05-06 97 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 
} 
相關問題