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

それを行う 1 つの方法は、独自の文字セットを作成して比較することです。次に、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 に答える