【问题标题】:How to detect keyboard events on hardware keyboard on iPhone (iOS)如何在 iPhone (iOS) 上检测硬件键盘上的键盘事件
【发布时间】:2010-09-15 11:28:11
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: iphone objective-c ios keyboard-events


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 嘿,你有一个代码示例来说明它是如何工作的吗?尤其是我如何隐藏隐藏文本字段的键盘。
    【解决方案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
    }
    

    【讨论】:

    • 请记住,这将覆盖应用程序上的任何其他文本输入。
    猜你喜欢
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2023-03-06
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多