1
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#import "KBFullAccessManager.h"
|
||||
#import "KBSkinManager.h"
|
||||
#import "KBURLOpenBridge.h" // 兜底从扩展侧直接尝试 openURL:
|
||||
#import "KBStreamTextView.h" // 流式文本视图
|
||||
|
||||
static NSString * const kKBFunctionTagCellId = @"KBFunctionTagCellId";
|
||||
|
||||
@@ -30,6 +31,10 @@ static NSString * const kKBFunctionTagCellId = @"KBFunctionTagCellId";
|
||||
@property (nonatomic, strong) UIButton *clearButtonInternal;
|
||||
@property (nonatomic, strong) UIButton *sendButtonInternal;
|
||||
|
||||
// 临时:点击标签后展示的“流式文本视图”与其删除按钮
|
||||
@property (nonatomic, strong, nullable) KBStreamTextView *streamTextView;
|
||||
@property (nonatomic, strong, nullable) UIButton *streamDeleteButton;
|
||||
|
||||
// Data
|
||||
@property (nonatomic, strong) NSArray<NSString *> *itemsInternal;
|
||||
|
||||
@@ -182,12 +187,68 @@ static NSString * const kKBFunctionTagCellId = @"KBFunctionTagCellId";
|
||||
return 12.0;
|
||||
}
|
||||
|
||||
// 用户点击功能标签:优先 UL 拉起主App,失败再 Scheme;两次都失败则提示开启完全访问
|
||||
- (void)kb_showStreamTextViewIfNeededWithTitle:(NSString *)title {
|
||||
// 已有则不重复创建
|
||||
if (self.streamTextView.superview) { return; }
|
||||
|
||||
// 隐藏标签列表,使用同一区域展示流式文本
|
||||
self.collectionViewInternal.hidden = YES;
|
||||
|
||||
KBStreamTextView *sv = [[KBStreamTextView alloc] init];
|
||||
sv.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.92];
|
||||
sv.layer.cornerRadius = 12.0; sv.layer.masksToBounds = YES;
|
||||
// 演示:可选填充一段初始文本
|
||||
if (title.length > 0) {
|
||||
[sv appendStreamText:[NSString stringWithFormat:@"%@\t", title]]; // 以制表符结尾,生成一个段落
|
||||
}
|
||||
[self addSubview:sv];
|
||||
[sv mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self.mas_left).offset(12);
|
||||
make.right.equalTo(self).offset(-12);
|
||||
make.top.equalTo(self.pasteViewInternal.mas_bottom).offset(10);
|
||||
make.bottom.equalTo(self.mas_bottom).offset(-10);
|
||||
}];
|
||||
self.streamTextView = sv;
|
||||
|
||||
// 右上角删除按钮
|
||||
UIButton *del = [UIButton buttonWithType:UIButtonTypeSystem];
|
||||
del.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.35];
|
||||
del.layer.cornerRadius = 14; del.layer.masksToBounds = YES;
|
||||
del.titleLabel.font = [UIFont systemFontOfSize:13 weight:UIFontWeightSemibold];
|
||||
[del setTitle:@"删除" forState:UIControlStateNormal];
|
||||
[del setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
|
||||
[del addTarget:self action:@selector(kb_onTapStreamDelete) forControlEvents:UIControlEventTouchUpInside];
|
||||
[sv addSubview:del];
|
||||
[del mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(sv.mas_top).offset(8);
|
||||
make.right.equalTo(sv.mas_right).offset(-8);
|
||||
make.height.mas_equalTo(28);
|
||||
make.width.mas_greaterThanOrEqualTo(56);
|
||||
}];
|
||||
self.streamDeleteButton = del;
|
||||
}
|
||||
|
||||
- (void)kb_onTapStreamDelete {
|
||||
// 关闭并销毁流式视图,恢复标签列表
|
||||
[self.streamDeleteButton removeFromSuperview];
|
||||
self.streamDeleteButton = nil;
|
||||
[self.streamTextView removeFromSuperview];
|
||||
self.streamTextView = nil;
|
||||
self.collectionViewInternal.hidden = NO;
|
||||
}
|
||||
|
||||
// 用户点击功能标签:优先 UL 拉起主App,失败再 Scheme;两次都失败则提示开启完全访问。
|
||||
// 若已开启“完全访问”,则直接在键盘侧创建 KBStreamTextView,并在其右上角提供删除按钮关闭。
|
||||
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
|
||||
|
||||
// 权限全部打开(键盘已启用 + 完全访问)。在扩展进程中仅需判断“完全访问”。
|
||||
if ([[KBFullAccessManager shared] hasFullAccess]) {
|
||||
NSString *title = (indexPath.item < self.itemsInternal.count) ? self.itemsInternal[indexPath.item] : @"";
|
||||
[self kb_showStreamTextViewIfNeededWithTitle:title];
|
||||
return;
|
||||
}
|
||||
|
||||
[KBHUD showInfo:@"处理中…"];
|
||||
// return;
|
||||
|
||||
|
||||
UIInputViewController *ivc = KBFindInputViewController(self);
|
||||
if (!ivc) return;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user