0

我已经看到了多种方法,但无法让它发挥作用。

我正在尝试将文本字段限制为仅允许输入字母字符。即ABCDEFabcdef(但所有这些)。

这是我现有的方法:

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

    // Check for the back space/delete
    if (string.length <=0 ) {
        if ([self.wordArray lastObject]) {
            [self.wordArray removeObjectsInRange:range];
            [self.tileCollectionView reloadData];
            return YES;

        }
    }

    // Check to make sure the word is not above 16 characters, that should be enough right?
    if (textField.text.length >= 16 ) {
        NSLog(@"WOOO SLOW DOWN THE TEXT IS ABOVE 16");
        return NO;
    } else {
            [self.wordArray addObject:string];
            [self.tileCollectionView reloadData];
            return YES;
    }

}

目前我检查一个退格并从数组中删除最后一个条目。此外,如果字母被接受,那么我将字母作为对象添加到数组中,这是为了其他东西。但是 ALPHA 检查的逻辑也应该考虑到这一点,只有当字母是“合法的”时,它才应该添加到数组中并重新加载集合视图。

4

1 回答 1

5

好吧,您可以这样做的一种方法是创建自己的字符集以进行比较。然后,您可以利用 NSStringstringByTrimmingCharactersInSet:和 NSCharacterSet 的invertedSet属性从集合中删除与您最初指定的字符不匹配的所有字符。然后,如果最终字符串与输入字符串匹配,则它不包含非法字符。

NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"];

NSString *input = @"a";

NSString *output = [input stringByTrimmingCharactersInSet:[myCharSet invertedSet]];

BOOL isValid = [input isEqualToString:output];

NSLog(@"%d",isValid);
于 2013-08-23T15:35:09.920 回答