4

我有一个带有登录页面的应用程序,其中包含三个不同随机字符的三个字段。当用户离开最后一个字段时,软键盘消失,用户可以触摸屏幕上的“登录”按钮。

当连接了硬件键盘(蓝牙或物理)时,我希望能够在其上点击“输入”。但是,由于用户不在一个字段中,我看不到如何检测这个键被按下。

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

谢谢

4

3 回答 3

15

对于 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")
}
于 2014-03-03T00:39:36.803 回答
1

实现此目的的一种方法是隐藏一个额外的(在您的情况下为第 4 个)文本字段。使其大小为 1x1 像素且透明。然后,当您的其他 3 个文本字段中的任何一个都不存在时,使其成为第一响应者,并在该隐藏字段中查找文本更改事件以触发您的键输入事件。

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

于 2010-09-15T16:07:43.750 回答
1

作为@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
}
于 2015-02-05T22:36:59.803 回答