我有一个带有登录页面的应用程序,其中包含三个不同随机字符的三个字段。当用户离开最后一个字段时,软键盘消失,用户可以触摸屏幕上的“登录”按钮。
当连接了硬件键盘(蓝牙或物理)时,我希望能够在其上点击“输入”。但是,由于用户不在一个字段中,我看不到如何检测这个键被按下。
有人会对哪个类处理按键事件有建议吗?大概有一个代表可以用来接收这些,但我通过 SDK 进行的搜索没有找到任何东西。
谢谢
我有一个带有登录页面的应用程序,其中包含三个不同随机字符的三个字段。当用户离开最后一个字段时,软键盘消失,用户可以触摸屏幕上的“登录”按钮。
当连接了硬件键盘(蓝牙或物理)时,我希望能够在其上点击“输入”。但是,由于用户不在一个字段中,我看不到如何检测这个键被按下。
有人会对哪个类处理按键事件有建议吗?大概有一个代表可以用来接收这些,但我通过 SDK 进行的搜索没有找到任何东西。
谢谢
对于 iOS 7.0 或更高版本,您可以从任何 UIResponder 为 keyCommands 属性返回 UIKeyCommands,例如 UIViewController:
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 var canBecomeFirstResponder: Bool {
true
}
override var keyCommands: [UIKeyCommand]? {
return [ UIKeyCommand(input: "\r", modifierFlags: [], action: #selector(enterPressed)) ]
}
@objc func enterPressed() {
print("Enter pressed")
}
实现此目的的一种方法是隐藏一个额外的(在您的情况下为第 4 个)文本字段。使其大小为 1x1 像素且透明。然后,当您的其他 3 个文本字段中的任何一个都不存在时,使其成为第一响应者,并在该隐藏字段中查找文本更改事件以触发您的键输入事件。
如果您不希望它也保持可见,您可能还需要检查出现的软件键盘的通知。
作为@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
}