【问题标题】:How to generate Keyboard key press and release events for an IOS application using Swift如何使用 Swift 为 IOS 应用程序生成键盘按键和释放事件
【发布时间】:2017-05-10 16:30:37
【问题描述】:

我是 IOS 开发新手,我想使用 Swift 2.3 或 3.0 版本将一些软键盘按键和释放事件从框架发送到应用程序。

感谢您的帮助

【问题讨论】:

标签: ios swift keyboard-events


【解决方案1】:

如果我理解您的问题是正确的,那么您是在询问如何检测您何时键入键。有 textField 委托方法可以为您完成这项工作。

`// UITextField Delegates
    func textFieldDidBeginEditing(_ textField: UITextField) {
    }
    func textFieldDidEndEditing(_ textField: UITextField) {
    }
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        return true;
    }
    func textFieldShouldClear(_ textField: UITextField) -> Bool {
        return true;
    }
    func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
        return true;
    }
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        return true;
    }
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder();
        return true;
    }`

更新:

无法直接从虚拟键盘获取触摸事件。但是,您可以使用放置在屏幕外的 UITextField,使其不可见并调用 becomeFirstResponder 来显示键盘。然后,您可以实现委托方法 textView:shouldChangeTextInRange: 以便在按下某个键时收到通知。

更简洁的方法是编写一个实现 UIKeyInput 协议的自定义 UIControl。您只需要提供 insertText:、deleteBackward 和 hasText 的实现(对于这个,您总是可以简单地返回 YES)。要使键盘可见,您必须再次为您的自定义控件调用 becomeFirstResponder。

这两种方法都有一个共同点,即只有在释放键(以便输入文本)时才会通知您,而不是在实际开始触摸时通知您。正如我所说,直接获取 tochesBegan 事件是不可能的。如果需要,您可能必须实现自己的屏幕键盘。

【讨论】:

  • 感谢 Sivajee,您理解正确,但我不想使用文本字段,所以还有其他方法可以检测键盘上按下或释放了哪个键?
【解决方案2】:

只需添加一个用于编辑通知事件的目标,如下所示:

// Obj-C
[textObject addTarget:self action:@selector(editingChanged:) forControlEvents:UIControlEventEditingChanged];

- (void)editingChanged:(id)object {
    // Do your code here
}

// Swift
textObject.addTarget(self, action: #selector(self.editingChanged(textObject:)), for: .editingChanged)

func editingChanged(textObject: AnyObject) {
    // Do your code here
}

【讨论】:

    猜你喜欢
    • 2012-03-08
    • 2010-11-27
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2015-03-24
    相关资源
    最近更新 更多