gpt4 book ai didi

ios - NSNotificationCenter PasteboardChangedNotification 未触发

转载 作者:搜寻专家 更新时间:2023-10-30 23:07:07 32 4
gpt4 key购买 nike

我正在为 iOS 编写自定义键盘,我想检测用户何时复制某些文本。我读到您可以使用 NSNotificationCenterUIPasteboardChangedNotification 来执行此操作。

但是,当用户复制文本时,我的选择器似乎没有被触发。当我在 addObserver 行上放置一个断点时,它似乎被跳过了,尽管断点在它被击中之前和之后。这是我正在使用的代码:

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

// Register copy notifications
NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleCopy:", name: UIPasteboardChangedNotification, object: nil)
}


func handleCopy(sender: NSNotification) {
//todo: handle the copied text event
}

任何人都可以确定我缺少什么吗?

编辑:

我注意到,如果我在注册通知后以编程方式更新粘贴板,则会触发通知,但我仍然无法弄清楚为什么如果用户使用上下文菜单“复制”,它不会被点击。

最佳答案

我的不是一个完美但足够工作的解决方案。我已经在键盘上使用它了。

@interface MyPrettyClass : UIViewController

@end

@implementation MyPrettyClass

@property (strong, nonatomic) NSTimer *pasteboardCheckTimer;
@property (assign, nonatomic) NSUInteger pasteboardchangeCount;

- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];

_pasteboardchangeCount = [[UIPasteboard generalPasteboard] changeCount];


//Start monitoring the paste board
_pasteboardCheckTimer = [NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(monitorBoard:)
userInfo:nil
repeats:YES];
}

- (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];

[self stopCheckingPasteboard];
}

#pragma mark - Background UIPasteboard periodical check

- (void) stopCheckingPasteboard{

[_pasteboardCheckTimer invalidate];
_pasteboardCheckTimer = nil;
}

- (void) monitorBoard:(NSTimer*)timer{

NSUInteger changeCount = [[UIPasteboard generalPasteboard]; changeCount];
if (changeCount != _pasteboardchangeCount) { // means pasteboard was changed

_pasteboardchangeCount = changeCount;
//Check what is on the paste board
if ([_pasteboard containsPasteboardTypes:pasteboardTypes()]){

NSString *newContent = [UIPasteboard generalPasteboard].string;

_pasteboardContent = newContent;

[self tryToDoSomethingWithTextContent:newContent];
}
}
}

- (void)tryToDoSomethingWithTextContent:(NSString)newContent{
NSLog(@"Content was changed to: %@",newContent);
}

@end

关于ios - NSNotificationCenter PasteboardChangedNotification 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26868751/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com