2

AS3Airプロジェクトでタブ対応のポップアップウィンドウを作成したい。現在、Tabキーを数回押すと、フォーカスはポップアップウィンドウ内のすべてのコンポーネントを通過し、ポップアップの背後にあるコンポーネントからボタンとTextFieldsのフォーカスを開始します。私はこの問題を2つの方法で解決しようとしましたが、どれもうまくいきませんでした。ここでは両方の方法を説明します

  1. 私がここ
    からadobeのドキュメントを読んだ公式の方法は、次のように私の場合に何をすべきかを説明しています。

    「各モーダルウィンドウコンポーネントにはFocusManagerのインスタンスが含まれているため、そのウィンドウのコントロールは独自のタブセットになります。これにより、ユーザーがTabキーを押して他のウィンドウのコンポーネントに誤って移動するのを防ぐことができます。」しかし、まだ理解できません。 FocusManagerの使用方法。

    • 以下のコードをコンストラクターに配置して、各ビューコンポーネントクラスにFocusManagerのインスタンスを作成しようとしましたが、機能しませんでした。

    _focusManager = new FocusManager(this);

    • 「モーダルウィンドウコンポーネント」とはどういう意味ですか?

  2. 回避策私が試したもう1つの方法は、親コンポーネントがFOCUS_INまたはFOCUS_OUTイベントをディスパッチするときに、各ボタンとTextFieldでtabEnabledプロパティを手動でtrueまたはfalseに設定することです。これは、新しいフラッシュファイルで作成した簡単な例では機能しましたが、大規模なプロジェクトでは機能せず、デバッグ方法がわかりません。ただし、これをダンプしてメソッド番号1に戻ることは非常に喜ばしいことです。

誰かが以前にこれらの問題に遭遇したことがありますか?他の方法で複数のタブサイクルを使用しましたか?私はこの問題に多くの時間を費やしてきたので、今のところどんなヒントも歓迎します。ありがとう[編集]この質問については多くの意見が寄せられていましたが、関連する回答がなかったので、編集して簡略化してみました

4

3 に答える 3

1

ええ、タブ操作は本当に苦痛です。

ポップアップを開いた後、タブ操作が機能しなくなるという同様の問題がありました。問題は、ポップアップがバックグラウンドで生きていて、タブをハイジャックしたことでした。

これで問題が解決し、個々のタブサイクルがメインアプリとポップアップで機能するようになりました:

// my popupclass

protected var fm:FocusManager;


public function show( centered:Boolean = true, parent:DisplayObject = null, modal:Boolean = true ):void {

// some code    
   fm = new FocusManager( this );
   fm.activate();

}

public function hide( closeType:int = 1 ):void {

   // more code
   fm.deactivate();

}
于 2013-09-14T14:53:15.683 に答える
0

必要なことを実行する独自のFocusManagerを作成することになりました。当初思っていたよりも簡単でした。申し訳ありませんが、ここにコードを投稿することはできませんが、私が行ったことについて簡単に説明し、それがお役に立てば幸いです。

  • fl.managers.IFocusManagerインターフェースを実装しましたが、古いマネージャーの動作を完全に尊重していませんでした
  • 私のCustomFocusManagerのコンストラクターは、パラメーターとしてタブ可能な子の配列を必要とし、子はループに表示される順序である必要があります。このようにして、子のタイプ(タブ可能かどうか)を気にしたり、tabIndexesが存在するかどうかを自問したりする必要はありませんでした。
  • tabIndexプロパティを無視しました
  • 同じ名前のFlexインターフェイスから着想を得たIFocusManagerContainerという新しいインターフェイスを作成しました
  • FlexのSystemManagerに似た静的クラスを作成しました。このクラスは、ステージで見つかった子に応じて、FocusManagerをアクティブ化/非アクティブ化するタイミングを認識しています。

mx.managers.FocusManagerコードを覗いてみたところ、FocusManagerが使用される可能性のあるすべてのケースを処理することにほとんどの努力が注がれました。これが、非常に長く複雑な理由です。fl.managers.FocusManagersが似ているとしか思えません。私の場合はまだ多くの問題があり、Adobeのものほど移植性はありませんが、非常にシンプルで、必要なことを実行します。

既存のFocusManagerを正しく使用する方法に関するガイドラインを引き続き確認したいと思います。

于 2010-10-14T14:41:28.180 に答える
0

達成しようとしているものによっては、FocusManager の代わりに tabIndex を使用できる場合があります。

http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/display/InteractiveObject.html#tabIndex

于 2010-09-14T09:52:04.217 に答える