Xamarin / iOS - 如何从硬件键盘禁用选项卡键码

Posted

技术标签:

【中文标题】Xamarin / iOS - 如何从硬件键盘禁用选项卡键码【英文标题】:Xamarin / iOS - How to disable tab keycode from hardware keyboard 【发布时间】:2017-08-09 18:15:39 【问题描述】:

我有一种情况,蓝牙条码扫描器在 Xamarin Forms 应用程序中充当硬件键盘。条形码被编码为包含一些需要解析到不同字段中的信息。

很遗憾,有些数据是制表符。 ios 在我的应用程序中接收到此硬件事件,一旦选项卡通过,下一个输入字段将被聚焦,并且条形码数据继续转储到其中(条形码扫描仪通过“顺序”读取数据,就好像模拟您正在输入它一样中)。

无论如何;我在 Xamarin/iOS 中截取 Entry (UITextView) 中的“制表符”字符时遇到了麻烦。

我在Entry 上设置了一个扩展,并将一个自定义渲染器与它相关联(MyRenderer : EntryRenderer)。搜索表明使用 Control.ShouldChangeTextInRange 应该可以用于字符重新映射,但选项卡事件发生在它出现的不同级别。

如何阻止 iOS 中的硬件键盘“Tab”字符聚焦到下一个字段?

【问题讨论】:

你试过用Xamarin.Forms.Editor代替Xamarin.Forms.Entry吗?我还没有尝试过,但它可能值得一试! 我确实尝试过编辑器 - 但布局影响会让人头疼 【参考方案1】:

您可以使用 KeyCommands 来过滤 EntryRenderer 中的 Tab 操作,如下所示:

public override UIKeyCommand[] KeyCommands

    get
    
        UIKeyCommand newForwardKeyCommand = UIKeyCommand.Create(new NSString("\t"), 0, new ObjCRuntime.Selector("Excute"));
        UIKeyCommand newBackKeyCommand = UIKeyCommand.Create(new NSString("\t"), UIKeyModifierFlags.Shift, new ObjCRuntime.Selector("Excute"));
        UIKeyCommand[] keyCommands =  newForwardKeyCommand, newBackKeyCommand ;
        return keyCommands;
    


[Export("Excute")]
private void Excute()

    Console.Write("Excute!");

参考:https://***.com/a/30876304/5474400

【讨论】:

我正在尝试这样的事情,但我终其一生都无法弄清楚如何绑定选择器 - 你是从哪里了解到 [Export()] 注释的? 我爱你。这正是我所需要的。 @thinice,我之前找到了一个示例here。很高兴听到它解决了您的问题:)!

以上是关于Xamarin / iOS - 如何从硬件键盘禁用选项卡键码的主要内容,如果未能解决你的问题,请参考以下文章

关闭键盘后 Xamarin.iOS 中的奇怪崩溃

如何禁用 iOS 8 表情符号键盘?

如何隐藏数字键盘,我使用的是 Xamarin iOS (C#)

Xamarin Forms - iOS 上的键盘覆盖条目(文本字段)

如何与 Xamarin UITest 中的自定义键盘进行交互?

如何使用 Xamarin Forms 更改键盘的习惯用法