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 设置文本:

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

谢谢!

4

1 回答 1

0

好的,首先我会在属性文本中添加一个观察者,而不是对类进行子类化并发布通知。接下来,我将检查文本对象是什么类。我会打电话给[text isKindOfClass:[NSString class]]. 通过调用它,您可以知道对象是否需要再次解析。

于 2012-08-11T10:04:58.033 回答