Bạn sẽ muốn sử dụng một trong các phương pháp textView.layoutManager
's.
invalidateDisplayCharacterRange:
imageForBounds:textContainer:characterIndex:
sẽ được gọi một lần nữa.
attachmentBoundsForTextContainer:[...]Index:
sẽ không được gọi lại là.
- Tốt nếu
image
đã được thay đổi bằng một số khác trong số cùng kích thước.
invalidateLayoutForCharacterRange:actualCharacterRange:
imageForBounds:textContainer:characterIndex:
sẽ được gọi một lần nữa.
attachmentBoundsForTextContainer:[...]Index:
sẽ được gọi lại.
- Tốt nếu
image
đã được thay đổi bằng một số khác là một kích thước khác nhau.
Nếu bạn chỉ muốn cập nhật một tập tin đính kèm duy nhất, bạn có thể tìm thấy phương pháp helper này tôi đã viết hữu ích:
- (NSRange)rangeOfAttachment:(NSTextAttachment *)attachment {
__block NSRange ret;
[self.textStorage enumerateAttribute:NSAttachmentAttributeName
inRange:NSMakeRange(0, self.textStorage.length)
options:0
usingBlock:^(id value, NSRange range, BOOL *stop) {
if (attachment == value) {
ret = range;
*stop = YES;
}
}];
return ret;
}
Bạn có thể vượt qua các kết quả NSRange
của phương pháp này để đối số đầu tiên của một trong các phương thức invalidate
này. Đối với các đối số actualCharacterRange:
của phương pháp thứ hai, tôi đã đi qua trong NULL
mà không có bất kỳ vấn đề.
Thanks a lot Nó của giải quyết vấn đề của tôi. – jhondge