组合操作时的 IOS Swift IBAction 行为



我有一个自定义键盘扩展,它可以按预期工作,但我遇到了一些我无法解释的奇怪行为。它主要用于将数据输入到 Excel 电子表格中,因此击键越少越好。

我有 2 个 IBA。 按键获取按键的值并将其插入到当前单元格中。 返回按下模拟将光标移动到下一个单元格的回车键。

如上所述,这些工作都很好,但是我现在正在尝试组合这些操作,以便用户只需按第一个键即可插入文本,然后移动到下一个单元格。

因此,当我简单地扩展按键 IBAction 中的代码以将代码包含在返回按下操作中时,它只是在文本中插入回车符并保留在同一单元格中。

请问我错过了什么?

下面是一个代码片段:

extension UIKeyInput{
func `return`() -> Void{
insertText("n")
}
}
class KeyboardViewController: UIInputViewController, AVAudioPlayerDelegate {
@IBAction func KeyPressed(_ sender: Any) {
let string =  (sender as AnyObject).titleLabel??.text
(textDocumentProxy as UIKeyInput).insertText("(string!)")
**//THIS IS THE LINE THAT FIXED THIS FOR ME
textDocumentProxy.adjustTextPosition(byCharacterOffset: -1)**        
self.EnterPressed(nil)
}
@IBAction func EnterPressed(_ sender: Any?) {
//default action for a return key press
textDocumentProxy.return()
}

我认为你需要覆盖UITextInputDelegate textDidChange方法(UIInputViewController 实现UITextInputDelegate(。事实证明,当文本更改时,会调用 textDidChange。并成为单元格下一个文本字段的第一响应者。

我设法通过确定是什么操作导致textDidChange触发来捏造这一点。事实证明,通过简单地调整光标部分,在插入文本和触发 Return 操作之间即可。

不太确定如何,但是在用户不知道的情况下实现了我想要的,这是一个笨拙并且没有开销。我已经更改了原始代码片段以显示修复程序。

最新更新