gpt4 book ai didi

ios - 获取 IOS 自定义键盘的文本字段内的当前文本

转载 作者:行者123 更新时间:2023-12-01 17:29:21 29 4
gpt4 key购买 nike

我正在开发一个 IOS 自定义键盘。我想知道是否有办法在文本字段中获取当前文本以及它是如何工作的。

例如,我们可以使用 textDocumentProxy.hasText()查看文本字段中是否有文本,但我想知道文本字段中的确切字符串。

最佳答案

最接近的东西是 textDocumentProxy.documentContextBeforeInputtextDocumentProxy.documentContextAfterInput .这些将尊重句子等,这意味着如果值是一个段落,你只会得到当前的句子。众所周知,用户可以通过多次重新定位光标来检索整个字符串,直到检索到所有内容。

当然,如果字段需要一个单一的值,如用户名、电子邮件、身份证号等,您通常不必担心这一点。结合输入上下文前后的值就足够了。

示例代码

对于单个短语值,您将执行以下操作:

let value = (textDocumentProxy.documentContextBeforeInput ?? "") + (textDocumentProxy.documentContextAfterInput ?? "")

对于可能包含句尾标点符号的值,它会稍微复杂一些,因为您需要在单独的线程上运行它。正因为如此,而且您必须移动输入光标才能获得全文,所以光标会明显移动。这是否会被 AppStore 接受也是未知数(毕竟,Apple 可能没有故意添加简单的方法来获取全文,以防止官方自定义键盘侵犯用户隐私)。

注意:以下代码基于 this Stack Overflow answer除了为 Swift 修改外,删除了不必要的 sleep ,使用没有自定义类别的字符串,并使用更有效的移动过程。
func foo() {
dispatch_async(dispatch_queue_create("com.example.test", DISPATCH_QUEUE_SERIAL)) { () -> Void in
let string = self.fullDocumentContext()
}
}

func fullDocumentContext() {
let textDocumentProxy = self.textDocumentProxy

var before = textDocumentProxy.documentContextBeforeInput

var completePriorString = "";

// Grab everything before the cursor
while (before != nil && !before!.isEmpty) {
completePriorString = before! + completePriorString

let length = before!.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)

textDocumentProxy.adjustTextPositionByCharacterOffset(-length)
NSThread.sleepForTimeInterval(0.01)
before = textDocumentProxy.documentContextBeforeInput
}

// Move the cursor back to the original position
self.textDocumentProxy.adjustTextPositionByCharacterOffset(completePriorString.characters.count)
NSThread.sleepForTimeInterval(0.01)

var after = textDocumentProxy.documentContextAfterInput

var completeAfterString = "";

// Grab everything after the cursor
while (after != nil && !after!.isEmpty) {
completeAfterString += after!

let length = after!.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)

textDocumentProxy.adjustTextPositionByCharacterOffset(length)
NSThread.sleepForTimeInterval(0.01)
after = textDocumentProxy.documentContextAfterInput
}

// Go back to the original cursor position
self.textDocumentProxy.adjustTextPositionByCharacterOffset(-(completeAfterString.characters.count))

let completeString = completePriorString + completeAfterString

print(completeString)

return completeString
}

关于ios - 获取 IOS 自定义键盘的文本字段内的当前文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37955259/

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