0

私はプロジェクトに取り組んでいます電話番号のテキストフィールドがあります。(123)123-1234 のような電話番号を追加したい ユーザーが textField をクリックすると、自動的に "(" が追加され、3 つの数字の後に ")" が追加され、3 つの数字の後に "-" が追加され、4 つの数字のテキスト フィールドが許可されませんでしたそれ以上の数字の追加

ここに私が使用しようとしている私のコードがあります

しかし、「-」でスタックした数字を削除しようとすると、1 つの問題があります。

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

if (textField == _phoneNumberTextFieldPersonalData) { NSString *text = [textField.text stringByReplacingCharactersInRange:range withString: string]; if (text.length == 1 ) { //or probably better, check if int textField.text = [NSString stringWithFormat: @"(%@", text]; return NO; } else if (text.length == 4) { textField.text = [NSString stringWithFormat: @"%@)", text]; return NO; } else if (text.length == 8) { textField.text = [NSString stringWithFormat: @"%@-", text]; return NO; } else if (text.length >= 14) { [textField resignFirstResponder]; return NO; } } return YES;

}

4

2 に答える 2

0

私はこのようにそれを解決しました、そしてそれは完璧に動作します

単純に、テキストを追加するか削除するかを確認するかどうかをチェックして、機能するようにしました

 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSLog(@"string Length %d",string.length);

if([string length]>0) { int ascii=[string characterAtIndex:0]; if ([_phoneNumberTextFieldPersonalData isEqual:textField]){ if(ascii>=48&&ascii<=57) { int length = [self getLength:textField.text]; NSLog(@"Length = %d ",length); if(length == 10) { if(range.length == 0) return NO; } if(length == 3) { NSString *num = [self formatNumber:textField.text]; textField.text = [NSString stringWithFormat:@"(%@) ",num]; if(range.length > 0) textField.text = [NSString stringWithFormat:@"%@",[num substringToIndex:3]]; } else if(length == 6) { NSString *num = [self formatNumber:textField.text]; //NSLog(@"%@",[num substringToIndex:3]); //NSLog(@"%@",[num substringFromIndex:3]); textField.text = [NSString stringWithFormat:@"(%@) %@-",[num substringToIndex:3],[num substringFromIndex:3]]; if(range.length > 0) textField.text = [NSString stringWithFormat:@"(%@)%@",[num substringToIndex:3],[num substringFromIndex:3]]; } return YES; } else return NO; } } return YES;

}

于 2013-05-27T10:13:12.230 に答える
0

UITextField は、 UITextField Class Referenceの最後にあるさまざまな通知を送信できます。これらをリッスンすることtextで、UITextField のプロパティを変更して、希望どおりに動作させることができます。

通知のオブザーバーとして自分自身を追加するには、次を使用します

[[NSNotificationCenter defaultCenter] addObserver:observer
                                         selector:@selector(handleTextFieldChange:)
                                             name:UITextFieldTextDidChangeNotification
                                           object:textField]

(引数は一例です。アプリに合わせて変更してください。)

selfオブザーバー(通常は任意のオブジェクトである可能性があります)が持っていることを確認してください

- (void)handleTextFieldChange:(NSNotification *)note {
    //handle the change here
}

方法。現在、このメソッドはUITextFieldTextDidChangeNotification、ユーザーが textField 内のテキストを変更するたびに発生する、textField が送信するたびに呼び出されます。

通知を聞くと、必要に応じて textField 内のテキストをフォーマットするのに役立ちます。

編集:を使用してオブザーバーとして自分自身を削除することを忘れないでください

[[NSNotificationCenter defaultCenter] removeObserver:someObserver 
                                                name:UITextFieldTextDidChangeNotification
                                              object:textField];

あなたが終わった後。これを配置するのに適した場所deallocは、オブザーバーの方法です。

于 2013-05-25T11:01:59.337 に答える