0

現在、3 つの s を持つ単純なアプリをプログラミングしていUITextFieldます。1 つを編集すると、他の 2 つも一緒にスケーリングする必要があります。

使ってみた

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

この方法ですが、

  • 置換文字列は、入力された最後の文字です
  • そこでバックスペースがどのように機能するのか理解できません
  • それは少し早すぎると呼ばれています

最初のポイントを「修正」できる場合(送信することにより

[NSString stringWithFormat:@"%@%@", [textField text], string];

stringパラメータとして)、変数が次のとおりであるため、2 番目のポイントは「修正」されません。

(lldb) po string
(NSString *) $1 = 0x0080cf14 <object returned empty description>

問題は、 AFTER と呼ばれるメソッドはありますtextFieldShouldChangeCharactersInRange:か? または、次の方法があります。

  • textFieldShouldChangeCharactersInRange:メソッドで YES を返す
  • そして、他の2つの値を変更するメソッドを呼び出しUITextFieldますか?

編集

以下を使用できます。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
  [self performSelector:@selector(myMethod:) withObject:textField afterDelay:0.1];
  return YES;
}

しかし、それは最も安全な解決策ではないようです

4

3 に答える 3

2

バックスペースは、空の文字列で NSRange を変更して機能します。できることは、textField:shouldChange の 3 つのテキスト フィールドを変更してから、メソッドに NO を返すことです。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string]; // this is what will happen if you return yes to this method

    anotherTextField.text = // do whatever u need
    yetAnotherTextField.text = // do whatever u need
    return NO;
}
于 2013-09-26T13:27:08.760 に答える
0

次のコードは、テキスト ビューの全文 (最後に挿入された文字を含む) を正しく出力しますが、これは役に立ちますか?

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if ([string length])
        NSLog(@"Current Text:%@", [textField.text stringByAppendingString:string]);
    else
        NSLog(@"Current Text:%@", [textField.text substringWithRange:(NSRange){0, [textField.text length]-1}]);
    return YES;
}

stringバックスペースは、パラメーターで空の文字列を送信するだけです。

于 2013-09-26T13:22:13.557 に答える
0

テキストフィールドの場合:

 [yourtextField addTarget:self action:@selector(textFieldDidChange) forControlEvents:UIControlEventEditingChanged];

 -(void)textFieldDidChange
 {
      //Your Code
 }
于 2013-09-26T13:06:47.677 に答える