gpt4 book ai didi

ios8 - 在 iOS8 自定义键盘扩展中获取完整字符串

转载 作者:行者123 更新时间:2023-12-03 14:59:00 25 4
gpt4 key购买 nike

我正在为 iOS 8 创建自定义键盘扩展。

我想获取用户在文本输入字段中写入的整个字符串。

不幸的是,我偶然发现了两个主要问题:

1)我在这个回调中得到空值:

- (void)textDidChange:(id<UITextInput>)textInput

2)当我调用这些方法时,我只得到部分字符串:
- [self.textDocumentProxy documentContextAfterInput];
- [self.textDocumentProxy documentContextBeforeInput];

我想在用户当前正在编辑的文本输入中获取整个字符串
你建议我做什么?

谢谢!

最佳答案

我找到了如何。

- (void)doSomething{
dispatch_async(inputQueue, ^{
[self getAllString];
});
return;
}

首先用 dispatch_async 和你自己的队列包装你的方法。
#define DELAY_LENGTH 0.01

-(void)getAllString{
id<UITextDocumentProxy> proxy = self.textDocumentProxy;
NSString* before = [proxy documentContextBeforeInput];
NSString* after = [proxy documentContextAfterInput];

NSMutableArray* afterArray = [NSMutableArray arrayWithCapacity:10];

while (after) {
unsigned long afterLength = [after length];
if(afterLength <= 0){
break;
}
[afterArray addObject:after];
[NSThread sleepForTimeInterval:DELAY_LENGTH];
[proxy adjustTextPositionByCharacterOffset:afterLength];
[NSThread sleepForTimeInterval:DELAY_LENGTH];
after = [proxy documentContextAfterInput];
}

NSMutableArray* beforeArray = [NSMutableArray arrayWithCapacity:10];

[NSThread sleepForTimeInterval:DELAY_LENGTH];
before = [proxy documentContextBeforeInput];

while (before) {
unsigned long beforeLength = [before length];
if (beforeLength <= 0) {
break;
}
[beforeArray addObject:before];
[NSThread sleepForTimeInterval:DELAY_LENGTH];
[proxy adjustTextPositionByCharacterOffset:-beforeLength];
[NSThread sleepForTimeInterval:DELAY_LENGTH];
before = [proxy documentContextBeforeInput];
}

NSLog(@"afterArray: %@",[self getArrayString:afterArray reverse:false]);

NSString* beforeString = [self getArrayString:beforeArray reverse:true];

NSLog(@"beforArray: %@",beforeString);

[NSThread sleepForTimeInterval:DELAY_LENGTH];
[proxy adjustTextPositionByCharacterOffset:beforeString.length];
}

有两个实用程序:
@implementation NSArray (Reverse)

- (NSArray *)reversedArray {
NSMutableArray *array = [NSMutableArray arrayWithCapacity:[self count]];
NSEnumerator *enumerator = [self reverseObjectEnumerator];
for (id element in enumerator) {
[array addObject:element];
}
return array;
}

@end


-(NSString*)getArrayString : (NSArray*)array
reverse : (BOOL)isReverse{
NSArray* tar = isReverse ? [array reversedArray] : array;
NSMutableString* result = [NSMutableString stringWithCapacity:10];
for (NSString* string in tar) {
[result appendString:string];
}
return result;
}

您必须为每种代理方法睡一点点。

结果 :

文本框
012, 345! 6789
0123. 4567! 89012 '34567890.' 123456789

安慰
2015-03-18 21:04:15.034 moveCursor[39413:2692914] afterArray: 
2015-03-18 21:04:15.035 moveCursor[39413:2692914] beforArray: 012, 345! 6789
0123. 4567! 89012 '34567890.' 123456789

关于ios8 - 在 iOS8 自定义键盘扩展中获取完整字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24479889/

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