如何检测iPhone上的硬件键盘上的键盘事件(iOS)
问题描述:
我有一个应用程序,其登录页面有三个不同的随机字符的三个字段。当用户离开最后一个字段时,软键盘消失,用户可以触摸屏幕上的“登录”按钮。如何检测iPhone上的硬件键盘上的键盘事件(iOS)
当连接了硬件键盘(蓝牙或物理)时,我希望能够点击“输入”。但是因为用户不在现场,我看不到如何检测被按下的这个键。
有人会建议哪个班级处理按键事件吗?大概有一个代表,我可以用来接收这些,但我通过SDK的搜索没有发现任何东西。
感谢
做到这一点
答
的方法之一是具有文本字段隐藏额外的(在你的情况下,第4)。使其尺寸为1x1像素并且透明。然后,当其他3个文本字段中的任何一个不是时,将其设置为第一响应者,然后在该隐藏字段中查找文本更改事件以触发您的按键输入事件。
您可能还想检查软件键盘出现的通知,如果您不希望它保持可见状态。
答
对于iOS 7.0或更高版本,您可以为keyCommands财产的任何UIResponder,如UIViewController中返回UIKeyCommands:
Objective-C的
// In a view or view controller subclass:
- (BOOL)canBecomeFirstResponder
{
return YES;
}
- (NSArray *)keyCommands
{
return @[ [UIKeyCommand keyCommandWithInput:@"\r" modifierFlags:0 action:@selector(enterPressed)] ];
}
- (void)enterPressed
{
NSLog(@"Enter pressed");
}
斯威夫特
// In a UIView/UIViewController subclass:
override func canBecomeFirstResponder() -> Bool {
return true
}
override var keyCommands: [UIKeyCommand]? {
return [ UIKeyCommand(input: "\r", modifierFlags: [], action: #selector(enterPressed)) ]
}
@objc func enterPressed() {
print("Enter pressed")
}
答
作为@Patrick响应的后续,以下是您如何在Xamarin.iOS中执行此操作:
public override bool CanBecomeFirstResponder
{
get { return true; }
}
public override UIKeyCommand[] KeyCommands
{
get
{
return new[]{ UIKeyCommand.Create((NSString)"\r", (UIKeyModifierFlags)0, new ObjCRuntime.Selector("enterPressed")) };
}
}
[Export("enterPressed")]
private void OnEnterPressed()
{
// Handle Enter Key
}
同意。这是个好主意。谢谢。 – hocker 2010-09-23 17:36:36
嘿,你有代码示例如何工作?特别是我如何隐藏隐藏文本框的键盘。 – 2010-10-28 10:34:34