2

削除されたキャラクターを特定する必要があります。たとえば、文字「@」を削除する場合、いくつかのアクションを実行する必要があります。これを行う簡単な方法はありますか?または、最近入力した文字を変数に保持し、shouldChangeCharactersInRange で range.length == 0 を確認する必要がありますか?

前もって感謝します。

4

5 に答える 5

5

私の意見では、次のようにする必要があります。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *textToChange  = [[textField text] substringWithRange:range];
    NSRange rangeOld = [textToChange rangeOfString:@"@"];
    NSRange rangeNew = [string rangeOfString:@"@"];
    if (rangeOld.location != NSNotFound && rangeNew.location == NSNotFound ) {
        [self userDidRemoveAtSign];
    }
    return YES;
}

説明: はい、userDidRemoveAtSignユーザーが「@」記号を削除したときのカスタム メソッドです。このコードは UITextField delegateにあります。ユーザーが UITextField のテキストを変更するたびに、文字を削除、置換、追加するたびに、テキストフィールドがこのメッセージを送信します

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

委任する。このメソッドでは、置換されたテキストに @ 記号が含まれているかどうか、および置換に含まれているかどうかを確認します。

于 2012-06-15T10:50:29.033 に答える
1

はい、あなたが言ったように、最後の文字セットを NSString に保持し、テキストが変更されたときにそれを新しい文字列と比較する必要があります

于 2012-06-15T10:30:49.297 に答える
0

この方法でこれを迅速に行うことができます。削除された文字が得られます

let strDeletedChar = (textView.text as NSString).substringWithRange(range)

于 2016-04-14T06:04:39.137 に答える