7

ユーザーが UITextField にスペースを入力できないように制限したい。この私はこのコードを使用しています

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if ( string == @" " ){
        UIAlertView *error = [[UIAlertView alloc] initWithTitle:@"Error" message:@"You have entered wrong input" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
        [error show];
        return NO;
    }
    else {
        return YES;
    }
}

しかし、それは機能していません....何が問題なのですか?

4

6 に答える 6

10

問題は

string == @" "

間違っている。文字列の等価性は、次を使用して行われます。

[string isEqualToString:@" "]

:)。

于 2009-08-20T06:38:26.807 に答える
10

これにより、置換文字列にスペースが含まれているかどうかが検索され、含まれている場合はエラー メッセージが表示され、含まれていない場合は YES が返されます。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
    NSRange spaceRange = [string rangeOfString:@" "];
    if (spaceRange.location != NSNotFound)
    {
        UIAlertView *error = [[UIAlertView alloc] initWithTitle:@"Error" message:@"You have entered wrong input" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
        [error show];
        return NO;
    } else {
        return YES;
    }
}
于 2009-08-20T06:56:23.057 に答える
3

現在の答えはこれです:

View Controller を UITextFieldDelegate に準拠するように設定します (コードの上部近くで次のようになります)。

@interface YourViewController () <UITextFieldDelegate>

...

@ end
@ implementation YourViewController

...

@end

次に、テキストフィールドで View Controller をデリゲートとして使用するようにします。これを行うには、Interface Builder に移動し、テキストフィールドをクリックして制御し、View Controller の下のバーにある黄色の円に線をドラッグして、ポップアップするメニューから「デリゲート」を選択します。または、次の段落で説明するプロパティを作成した後にデリゲートを設定することにより、コードでこれを行うこともできます。self.yourTextField.delegate = self; でこのようにします。おそらくviewDidLoad内の適切な場所に。

また、View Controller のプロパティとして textField を設定します。これを行うには、コードをアシスタント エディターで開いた状態で Interface Builder に移動し、Interface Builder のテキスト フィールドからプロパティがリストされているコード内の場所 (@interface と最初の@終わり)。次に、ポップアップ ウィンドウに名前を入力します。以下のコードでは、たとえば「yourTextField」を使用しました。(これが View Controller をデリゲートとして使用する唯一のテキスト フィールドであることが確実な場合は、以下のコードの外側の if ループと一緒に、このセクションをスキップできますが、将来の可能性について前もって計画することをお勧めします)

次に、次のデリゲート メソッドを使用して、スペースの入力を禁止することができます。

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == self.yourTextField)
    {
        if ([string isEqualToString:@" "] )
        {
            return NO;
        }
    }
    return YES;
}
于 2014-03-18T22:23:59.887 に答える
2

これを試してください (これを - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string) に設定します):

NSArray *escapeChars = [NSArray arrayWithObjects:@" ", nil];

NSArray *replaceChars = [NSArray arrayWithObjects:@"",nil];
int len = [escapeChars count];
NSMutableString *temp = [[textField text] mutableCopy];
for(int i = 0; i < len; i++) {
    [temp replaceOccurrencesOfString: [escapeChars objectAtIndex:i] withString:[replaceChars objectAtIndex:i] options:NSLiteralSearch range:NSMakeRange(0, [temp length])];
}
[textField setText:temp];
return TRUE;
于 2009-08-20T06:39:01.250 に答える
1
string == @" "

と のそれぞれのアドレスを比較するだけではありませんstring@" "? それはあなたがしたい比較ではありません。

また、スペースだけの文字列を入力できないようにしますか? もしそうなら、それを==適切な文字列比較に変更する必要があります。そうでなく、入力文字列内のすべてのスペースを防ぎたい場合は、文字列マッチャーが必要です

于 2009-08-20T06:41:22.057 に答える