2

UITextViewユーザーが に入力するか、setText:メソッドが呼び出されたときに、文字列の特定の部分を解析してNSAttributedStringから、テキスト ビューに戻そうとしています。ただし、現在の実装では、これにより無限再帰ループが発生します。新しい属性付きテキストを設定すると、テキストが変更され (および通知が発生する) ため、テキストを再解析します。

誰かが何らかのフラグを使用することを提案したので、テキストを解析して設定している間は、それを続けません。これは最適なソリューションのようには見えませんが。ここに私のコードのスニペットがあります...

CustomTextView.h (UITextView サブクラス)

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewDidChange:) name:NSTextViewTextDidChangeNotification object:self];

CustomTextView textViewDidChange:

- (void)textViewDidChange:(NSNotification *)notification;
{
    __block NSString *string = self.text;

    dispatch_async(parserQueue, ^{
        NSAttributedString *parsedString = [self parseAttributesForString:string];
        dispatch_async(dispatch_get_main_queue(), ^{
            [self setAttributedText:parsedString];
        });
    });
}

CustomTextView setText:

- (void)setText:(NSString *)text
{
    [super setText:text];
    [self textViewDidChange:nil];
}

ありがとう!

4

1 に答える 1

0

わかりましたので、まず、クラスをサブクラス化して通知を投稿する代わりに、プロパティ テキストにオブザーバーを追加します。次に、テキスト オブジェクトがどのクラスであるかを確認します。を呼び出してこれを行い[text isKindOfClass:[NSString class]]ます。これを呼び出すことで、オブジェクトを再度解析する必要があるかどうかがわかります。

于 2012-08-11T10:04:58.033 に答える