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 (C#)
Xamarin Forms - iOS 上的键盘覆盖条目(文本字段)