54 lines
1.8 KiB
Objective-C
54 lines
1.8 KiB
Objective-C
//
|
||
// KBStreamTextView.h
|
||
// KeyBoard
|
||
//
|
||
// 一个可滚动的视图,用于接收“流式”文本输入。
|
||
// 当检测到分隔符(默认: "\t" 制表符)时,会将当前累计的文本作为一个段落
|
||
// 创建一个新的 UILabel;每个标签支持自动换行和点击事件。
|
||
// 适用于流式数据逐步到达、按段落追加展示的场景。
|
||
//
|
||
|
||
#import <UIKit/UIKit.h>
|
||
|
||
NS_ASSUME_NONNULL_BEGIN
|
||
|
||
typedef void (^KBStreamTextTapHandler)(NSInteger index, NSString *text);
|
||
|
||
@interface KBStreamTextView : UIView
|
||
|
||
/// 分段分隔符,默认 "\t"(制表符)。
|
||
@property (nonatomic, copy) NSString *delimiter;
|
||
|
||
/// 标签使用的字体,默认系统 16 号。
|
||
@property (nonatomic, strong) UIFont *labelFont;
|
||
|
||
/// 标签文本颜色,iOS 13+ 默认 labelColor,低版本默认黑色。
|
||
@property (nonatomic, strong) UIColor *labelTextColor;
|
||
|
||
/// 水平内边距(左右留白),默认 12。
|
||
@property (nonatomic, assign) CGFloat contentHorizontalPadding;
|
||
|
||
/// 标签间的垂直间距,默认 5。
|
||
@property (nonatomic, assign) CGFloat interItemSpacing;
|
||
|
||
/// 标签点击回调,提供被点击的序号与文本。
|
||
@property (nonatomic, copy, nullable) KBStreamTextTapHandler onLabelTap;
|
||
|
||
/// 是否裁剪各段落前后的空白/换行,默认 YES。
|
||
@property (nonatomic, assign) BOOL shouldTrimSegments;
|
||
|
||
/// 追加流式文本(边输边见):
|
||
/// - 实时将未完成段落展示在“当前标签”上;
|
||
/// - 当遇到分隔符时,先将当前标签视为“完成段”,可选裁剪空白,再创建一个新的空标签作为下一段的容器。
|
||
- (void)appendStreamText:(NSString *)text;
|
||
|
||
/// 清空所有标签并重置内部缓冲。
|
||
- (void)reset;
|
||
|
||
/// 结束输入:将当前正在输入的段落视为完成段(按需裁剪),但不会再新建标签。
|
||
- (void)finishStreaming;
|
||
|
||
@end
|
||
|
||
NS_ASSUME_NONNULL_END
|