2013-04-22 92 views
2

有无论如何,我可以允许用户在文本视图中只输入字母数字字符,没有其他字符。只允许在UITextView中的字母数字字符

编辑:

试过,

if ([_txtView.text rangeOfCharacterFromSet:alphaSet].location != NSNotFound) 
    { 
     UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Hello" message:@"Only alpha numeric characters are allowed" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alert show]; 
     return; 

    } 

,但这只适用于某些时代

谢谢!

+0

如果章程不是字母数字,则在“shouldChangeCharactersInRange”方法中返回NO。 – user1113101 2013-04-22 12:37:10

回答

13

您可以使用[[[[NSCharacterSet字母数字字符集] invertedSet]来实现。此方法将返回一个字符集,其中只包含接收器中不存在的字符。

NSCharacterSet *charactersToBlock = [[NSCharacterSet alphanumericCharacterSet] invertedSet]; 

//符合UITextField委托并实现此方法。为TextView的和超控

- (BOOL)textField:(UITextField *)field shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)characters 
{ 
    return ([characters rangeOfCharacterFromSet:charactersToBlock].location == NSNotFound); 
} 
1

试试这个:在的UITextField的委托方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
      if (textField == txtWebsite) { 
        NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "]; 

        if ([string rangeOfCharacterFromSet:set].location != NSNotFound) { 
         return YES; 
        } 
        else { 
         return NO; 
        } 
      } 
      else { 
        return YES; 
      } 
    } 

写代码。

+0

对我而言,它的作品很好...谢谢你 – mvasco 2014-10-31 05:35:43

1

组代表/实施试验应在范围方法改变

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet]; 
    BOOL valid = [[text stringByTrimmingCharactersInSet:alphaSet] isEqualToString:@""]; 
    return valid;  
} 
+0

这也禁止我不想要的空间.. – user2268539 2013-04-22 13:16:43

0

//添加这在viewDidLoad中或任何init方法 NSCharacterSet * blockedCharacters = [[[NSCharacterSet alphanumericCharacterSet] invertedSet] retain];

然后将您的文本字段的委托放在nib文件中。

- (BOOL)textField:(UITextField *)field shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)characters 
{ 
    return ([characters rangeOfCharacterFromSet:blockedCharacters].location == NSNotFound); 
} 

或出现在shouldChangeCharactersInRange方法的另一种方式。您可以检查

{ 
    NSString *stringPlace = @"[a-z A-Z]*"; 

    NSPredicate *testPlace = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stringPlace]; 
     BOOL matches = [testPlace evaluateWithObject:string]; 

     if (!matches && string.length > 5) 
     { 
      return NO; 
     } 
    return YES; 
} 
0

等效斯威夫特3版本通过@ user1113101

虽然它晚来回答还有其他简单的和伟大的方式提供的答案,但这个答案可能是有用的人。

这很简单,对我来说就像一个魅力。

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    /// 1. replacementText is NOT empty means we are entering text or pasting text: perform the logic 
    /// 2. replacementText is empty means we are deleting text: return true 
    if text.characters.count > 0 { 
     var allowedCharacters = CharacterSet.alphanumerics 

     let unwantedStr = text.trimmingCharacters(in: allowedCharacters) 
     return unwantedStr.characters.count == 0 
    } 

    return true 
} 

注意:这也适用于将字符串粘贴到文本字段中。如果粘贴的字符串包含任何不需要的字符,则不会在文本字段中显示。

相关问题