我有一个自定义键盘扩展名,该扩展名可以按预期工作,但遇到一些我无法解释的奇怪行为。它主要用于将数据输入到Excel电子表格中,因此击键次数越少越好。
我有2个IBAction。 Keypressed获取按键的值并将其插入到当前单元格中。 Returnpressed模拟Enter键,将光标移动到下一个单元格。
如上所述,这些工作都很好,但是我现在尝试合并这些动作,以便用户仅需按第一个键,然后插入文本,然后移至下一个单元格即可。
因此,当我简单地扩展Keypressed IBAction中的代码以将代码包括在Returnpressed操作中时,它只是将回车符插入文本并停留在同一单元格中。
我想念什么?
这是一个代码段:
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()
}
答案 0 :(得分:0)
我认为您需要重写UITextInputDelegate textDidChange方法(UIInputViewController实现UITextInputDelegate)。事实证明,当文本更改时,将调用textDidChange。并使第一响应者成为单元格的下一个文本字段。
答案 1 :(得分:0)
通过确定导致textDidChange触发的操作,我设法做到了这一点。事实证明,在插入文本和触发Return操作之间,只需调整光标部分即可。
不是很确定如何实现,但是在用户不知道这是一个麻烦并且没有开销的情况下实现了我想要的。我已经更改了原始代码段以显示此修复程序。