C# 如何在没有文本框的情况下获取键盘事件?
在我的Xamarin.iOS应用程序(C#)中,我有一个C# 如何在没有文本框的情况下获取键盘事件?,c#,ios,objective-c,xamarin.ios,C#,Ios,Objective C,Xamarin.ios,在我的Xamarin.iOS应用程序(C#)中,我有一个iPhoneOSGameView(它继承自UIView),我想从外部(比如蓝牙)键盘捕获按键 因为这是为了在游戏中添加对键盘控制的支持,所以我希望能够响应这些事件,而不必像中建议的那样放置文本框或任何其他文本字段(实际上,它们不是捕获按键,而是文本框的更改,这与我想做的完全不同) 在Android中,我可以通过在我的活动中覆盖OnKeyDown和onkeydup来实现这一点,但是UIView或UIViewController上似乎没有类似的
iPhoneOSGameView
(它继承自UIView
),我想从外部(比如蓝牙)键盘捕获按键
因为这是为了在游戏中添加对键盘控制的支持,所以我希望能够响应这些事件,而不必像中建议的那样放置文本框或任何其他文本字段(实际上,它们不是捕获按键,而是文本框的更改,这与我想做的完全不同)
在Android中,我可以通过在我的活动中覆盖OnKeyDown
和onkeydup
来实现这一点,但是UIView
或UIViewController
上似乎没有类似的事件
在UIView
或UIViewController
中是否有捕获按键和按键释放的方法
由于这是针对Xamarin.iOS的,我当然更喜欢C#答案,但我想如果需要,我可以阅读Objective-C。为了在
UIView
上获取键盘事件,您需要
要做到这一点,首先必须使用[采用(“UIKeyInput”)]
装饰视图类
然后,您需要实现uikeyinport
所需的所有方法:
[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知道这可以成为第一响应者(不管是什么):
然后,当视图出现时,您必须成为第一个响应者,例如在WillEnterForeground
:
view.BecomeFirstResponder();
view.ResignFirstResponder();
当视图离开焦点时,不要忘记停止作为第一响应者,例如在DidEnterBackground
:
view.BecomeFirstResponder();
view.ResignFirstResponder();
最后,最好实现inputView
,并让它返回一个空的UIView
,这样默认键盘就不会出现:
private UIView inputView;
// ...
inputView = new UIView(new RectangleF());
// And somewhere else...
[Export("inputView")]
public new UIView InputView { get { return inputView; } }
感谢聊天中的@radial帮我解决了这个问题
此解决方案不是关于获取“向下键”和“向上键”事件,而是关于创建一个新的文本框。如果有人指出如何真正让低级别的事件向下键和向上键(如果可能的话),那就太棒了。@TaW:为什么要删除c#tag?这是一个C#程序,我期待一个C#答案。如果要删除语言标记,它将是objective-c标记。我离开objective-c是因为objective-c的答案在某种程度上也被接受了,但c#更受欢迎,因为我自己无法完全理解objective-c。对不起!但我在你的帖子中没有看到与C#的联系。因此,如果是,请尝试在标记中指定您的平台(WPF、ASP、Winforms)!啊Monotouch,那已经不见了@TaW:monotouch标签从一开始就在那里。说这是“Xamarin.iOS”的部分从一开始就存在。我在文本中添加了一些澄清,以确保每个人都理解这是c。好吧,让我们同意我错了;-)这是一个非常好的答案,对我来说非常有效。你应该把它标记为已接受的答案。