2017-08-09 14 views
0

XamarinフォームアプリケーションでBluetoothバーコードスキャナがハードウェアキーボードとして機能する状況があります。バーコードは、異なるフィールドに解析される必要があるビットの情報を含むようにエンコードされます。Xamarin/iOS - ハードウェアキーボードからタブキーコードを無効にする方法

残念ながら、一部のデータはタブ文字です。 iOSはアプリでこのハードウェアイベントを受信し、タブポンプが通過すると次の入力フィールドにフォーカスが当てられ、バーコードデータはそのデータにダンプされ続けます(バーコードスキャナはデータを「順次」読み込みます)に)。いずれにしても、私は、Xamarin/iOSのEntryUITextView)の「タブ」文字を傍受している時代を過ごしています。

私はEntryに拡張を設定し、カスタムレンダラにそれを関連付けました(MyRenderer : EntryRenderer)。検索では、Control.ShouldChangeTextInRangeを使用すると文字の再マッピングが機能するはずですが、タブイベントは表示されるレベルとは異なることがわかります。

iOSのハードウェアキーボード「タブ」文字を次のフィールドに合わせるのを止めるにはどうすればよいですか?

+0

があなたの代わりに 'Xamarin.Forms.Editor'を使用してみましたが'Xamarin.Forms.Entry'の?私はまだそれを試していないが、それはショットの価値があるかもしれません! –

+0

私は編集者に挑戦しましたが、レイアウトの意味は頭痛を引き起こすことになりました – thinice

答えて

1

あなたはこのようなあなたのEntryRendererにタブアクションをフィルタリングするためにKeyCommandsを使用することができます。

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://stackoverflow.com/a/30876304/5474400

+0

私はこのようなことを試していましたが、私の人生ではセレクタを結びつける方法を理解できませんでした。 Export()] '注釈? – thinice

+0

私はあなたを愛しています。それはまさに私が必要としたものでした。 – thinice

+0

@thinice、私はサンプル[ここ](https://developer.xamarin.com/api/member/MonoTouch.Foundation.NSObject.PerformSelector/p/MonoTouch.ObjCRuntime.Selector/MonoTouch.Foundation.NSObject/System)を見つけました。ダブル/#備考)を前にしてください。聞いてうれしいことがあなたの問題を解決します:) –

関連する問題