我如何获得键盘事件没有文本框

本文关键字:文本 事件 何获得 键盘 | 更新日期: 2023-09-27 18:07:38

在我的Xamarin。iOS应用程序(c#),我有一个iPhoneOSGameView(从UIView继承),我想从外部(说蓝牙)键盘捕捉按键。

由于这是为了在游戏中添加键盘控制的支持,我希望能够响应这些事件,而无需放置文本框或任何其他文本字段,如在这个问题中提出的(实际上,它们不捕获按键,但文本框的变化,这与我想要做的完全不同)

在Android中,我可以通过在我的活动中覆盖OnKeyDownOnKeyUp来实现这一点,但在UIViewUIViewController上似乎没有类似的事件。

是否有一种方法可以捕获UIViewUIViewController中的按键和键释放?

因为这是Xamarin。对于iOS,我当然更喜欢c#的答案,但我想如果需要的话,我也可以阅读Objective-C。

我如何获得键盘事件没有文本框

为了在UIView上获得键盘事件,您需要采用UIKeyInput协议。

要做到这一点,首先你必须用[Adopts("UIKeyInput")]来装饰你的视图类。

然后,您需要实现UIKeyInput所需的所有方法:

    [Export("hasText")]
    bool HasText { get { return false; } }
    [Export("insertText:")] // Don't forget the colon
    void InsertText(string text) // This is what gets called on a key press
    {
    }
    [Export("deleteBackward")]
    void DeleteBackward()
    {
    }

最后,你必须让iOS知道这可以成为第一响应者(不管是什么):

    public override bool CanBecomeFirstResponder { get { return true; } }

然后当视图出现时,你必须成为第一个响应者,例如在WillEnterForeground:

    view.BecomeFirstResponder();

当视图离开焦点时,不要忘记停止作为第一响应者,例如在DidEnterBackground:

    view.ResignFirstResponder();

最后,实现inputView并让它返回一个空的UIView是一个好主意,这样默认键盘就不会出现:

    private UIView inputView;
    // ...
    inputView = new UIView(new RectangleF());
    // And somewhere else...
    [Export("inputView")]
    public new UIView InputView { get { return inputView; } }

感谢@radical帮我解决了这个问题。

这个解决方案不是关于按下键和按上键事件,而是关于创建一个新的文本框。如果有人能指出如何让低级的按键按下和按上事件,那就太棒了,如果可能的话。