如何检测iPhone上的硬件键盘上的键盘事件(iOS)

问题描述:

我有一个应用程序,其登录页面有三个不同的随机字符的三个字段。当用户离开最后一个字段时,软键盘消失,用户可以触摸屏幕上的“登录”按钮。如何检测iPhone上的硬件键盘上的键盘事件(iOS)

当连接了硬件键盘(蓝牙或物理)时,我希望能够点击“输入”。但是因为用户不在现场,我看不到如何检测被按下的这个键。

有人会建议哪个班级处理按键事件吗?大概有一个代表,我可以用来接收这些,但我通过SDK的搜索没有发现任何东西。

感谢

做到这一点

的方法之一是具有文本字段隐藏额外的(在你的情况下,第4)。使其尺寸为1x1像素并且透明。然后,当其他3个文本字段中的任何一个不是时,将其设置为第一响应者,然后在该隐藏字段中查找文本更改事件以触发您的按键输入事件。

您可能还想检查软件键盘出现的通知,如果您不希望它保持可见状态。

+0

同意。这是个好主意。谢谢。 – hocker 2010-09-23 17:36:36

+0

嘿,你有代码示例如何工作?特别是我如何隐藏隐藏文本框的键盘。 – 2010-10-28 10:34:34

对于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 
}