当用户键入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];
}
谢谢!
答案 0 :(得分:0)
好的,首先我要在属性文本中添加一个观察者,而不是对类进行子类化并发布通知。接下来,我只是检查文本对象是什么类。我打电话给[text isKindOfClass:[NSString class]]
。通过调用它,您可以知道对象是否需要再次解析。