Flush pills on text view updates

This commit is contained in:
aringenbach
2022-05-13 13:52:46 +02:00
parent 932b9ad4e6
commit 77a6469625
4 changed files with 63 additions and 7 deletions
@@ -26,6 +26,14 @@ NS_ASSUME_NONNULL_BEGIN
// The last hit test location received by the view.
@property (nonatomic, readonly) CGPoint lastHitTestLocation;
/// Register a view that has been added as a pill to this text view.
/// This is needed in order to flush pills that are not always removed properly by the system.
/// All registered views will be manually removed from hierarchy on attributedText or text updates.
///
/// @param pillView pill view to register
- (void)registerPillView:(UIView *)pillView API_AVAILABLE(ios(15));
@end
NS_ASSUME_NONNULL_END
@@ -20,6 +20,7 @@
@interface MXKMessageTextView()
@property (nonatomic, readwrite) CGPoint lastHitTestLocation;
@property (nonatomic) NSArray *pillViews;
@end
@@ -54,4 +55,40 @@
return [self isThereALinkNearLocation:point];
}
#pragma mark - Pills Flushing
- (void)setText:(NSString *)text
{
if (@available(iOS 15.0, *)) {
[self flushPills];
}
[super setText:text];
}
- (void)setAttributedText:(NSAttributedString *)attributedText
{
if (@available(iOS 15.0, *)) {
[self flushPills];
}
[super setAttributedText:attributedText];
}
- (void)registerPillView:(UIView *)pillView
{
NSMutableArray *pills = [NSMutableArray arrayWithArray:self.pillViews];
[pills addObject:pillView];
self.pillViews = pills;
}
/// Flushes all previously registered Pills from their hierarchy.
- (void)flushPills API_AVAILABLE(ios(15))
{
for (UIView* view in self.pillViews)
{
view.alpha = 0.0;
[view removeFromSuperview];
}
self.pillViews = [NSArray new];
}
@end