苹果为了保护用户隐私,键盘只能获取光标附近的50-100左右的字符,但是做为扩展键盘应用,有时候会有获取所有文案的需求,通过循环删除,发现textDocumentProxy并没有更新,所以pass掉删除获取的方法,后续发现通过调整光标位置textDocumentProxy会更新,然后循环获取即可
不废话直接上代码
-(void)checkAllString{
NSString *string = [self.textDocumentProxy.documentContextBeforeInput copy];
if(string.length <= 0){
// 光标恢复回去
[self.textDocumentProxy adjustTextPositionByCharacterOffset:self.currentText.length];
// 获取完成,做自己的操作即可
return;
}
self.currentText = [NSString stringWithFormat:@"%@%@",string,self.currentText];
// 光标向前移动
[self.textDocumentProxy adjustTextPositionByCharacterOffset:-string.length];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self checkAllString];
});
}
网友评论