添加轮询粘贴

This commit is contained in:
2025-10-29 15:49:43 +08:00
parent 7fd084e529
commit e594711fa3

View File

@@ -26,6 +26,10 @@ static NSString * const kKBFunctionTagCellId = @"KBFunctionTagCellId";
// Data
@property (nonatomic, strong) NSArray<NSString *> *itemsInternal;
//
@property (nonatomic, strong) NSTimer *pasteboardTimer; // 线
@property (nonatomic, assign) NSInteger lastHandledPBCount; // changeCount
@end
@implementation KBFunctionView
@@ -37,10 +41,17 @@ static NSString * const kKBFunctionTagCellId = @"KBFunctionTagCellId";
[self setupUI];
[self reloadDemoData];
//
_lastHandledPBCount = [UIPasteboard generalPasteboard].changeCount;
}
return self;
}
- (void)dealloc {
[self stopPasteboardMonitor];
}
#pragma mark - UI
- (void)setupUI {
@@ -151,7 +162,76 @@ static NSString * const kKBFunctionTagCellId = @"KBFunctionTagCellId";
#pragma mark - Button Actions
- (void)onTapPaste { NSLog(@"点击:粘贴"); }
- (void)onTapPaste {
//
// - iOS16+ App
// - iOS15
// viewDidLoad
UIPasteboard *pb = [UIPasteboard generalPasteboard];
NSString *text = pb.string; //
if (text.length > 0) {
//
self.pasteView.placeholderLabel.text = text;
//
// self.pasteView.placeholderLabel.numberOfLines = 0;
} else {
//
NSLog(@"粘贴板无可用文本或未授权粘贴");
}
}
#pragma mark -
//
// -
// - changeCount pasteboard.string
// * iOS16+
// * iOS15
// - / changeCount
- (void)startPasteboardMonitor {
if (self.pasteboardTimer) return;
__weak typeof(self) weakSelf = self;
self.pasteboardTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 repeats:YES block:^(NSTimer * _Nonnull timer) {
__strong typeof(weakSelf) self = weakSelf; if (!self) return;
UIPasteboard *pb = [UIPasteboard generalPasteboard];
NSInteger cc = pb.changeCount;
if (cc <= self.lastHandledPBCount) return; //
self.lastHandledPBCount = cc; //
// iOS16+
NSString *text = pb.string;
if (text.length > 0) {
self.pasteView.placeholderLabel.text = text;
}
}];
}
- (void)stopPasteboardMonitor {
[self.pasteboardTimer invalidate];
self.pasteboardTimer = nil;
}
- (void)didMoveToWindow {
[super didMoveToWindow];
if (self.window && !self.isHidden) {
[self startPasteboardMonitor];
} else {
[self stopPasteboardMonitor];
}
}
- (void)setHidden:(BOOL)hidden {
BOOL wasHidden = self.isHidden;
[super setHidden:hidden];
if (wasHidden != hidden) {
if (!hidden && self.window) {
[self startPasteboardMonitor];
} else {
[self stopPasteboardMonitor];
}
}
}
- (void)onTapDelete { NSLog(@"点击:删除"); }
- (void)onTapClear { NSLog(@"点击:清空"); }
- (void)onTapSend { NSLog(@"点击:发送"); }