0

のスキニングに取り組んでSpark:TabBarいますが、タブバーのボタンに使用されているカスタム スキンで問題が発生しています。これが私が達成しようとしていることの図です:

_______________________
|                     |
|  Label            X |
|_____________________|

spark:ButtonBarButtonそのため、ラベルと、リストからアイテムを削除するためのセカンダリ ボタンを持つボタン (コンポーネントでカスタム スキンを使用しています) があります。このXボタンは、ユーザーがメイン ボタンにカーソルを合わせたときにのみ表示されます。

私が抱えている問題は、ボタン内のボタンであるXため、ボタンを完全に操作できないことです。ホバー状態には応答せず、アタッチしたクリック ハンドラーは起動しません。代わりに、親ボタンのクリック イベントが起動します。

私は現在、 を使用していじっていstopPropagationますが、それはホバー状態の問題を修正しない (というか、修正するとは思わない) ため、より実現可能な解決策を探しています。

ここに私のコードのいくつかの例があります:

VerticalPillBarSkin - hostComponent: spark.components.TabBar

<s:DataGroup id="dataGroup" width="100%" height="100%" clipAndEnableScrolling="true">
    <s:layout>
        <s:VerticalLayout paddingRight="3" gap="3"/>
    </s:layout>
    <s:itemRenderer>
        <fx:Component>
            <s:ButtonBarButton skinClass="{VerticalPillBarButtonSkin}" width="120"/>
        </fx:Component>
    </s:itemRenderer>
</s:DataGroup>

VerticalPillBarButtonSkinSymbolButton - ButtonBase を拡張するカスタム コンポーネントであることに注意してください。

<s:Label id="labelDisplay" color="0x000000"
         textAlign="left" verticalAlign="middle"
         horizontalCenter="0" verticalCenter="1"
         left="0" right="12" top="6" bottom="6" />

<s:Spacer width="100%" />

<x:SymbolButton  id="removeButton" 
                  includeIn="overStates"
                  icon="{REMOVE}"
                  iconRollover="{REMOVE_OVER}"
                  right="5" verticalCenter="0" click="closeHandler()" />

この問題を回避する良い方法を知っている人はいますか? 以外のものを使用して遊んでいましs:ButtonBarButtonVerticalPillBarButtonが、それは機能するオプションではないようです。他に提供できる情報がありましたら、お気軽にお尋ねください。

4

3 に答える 3

1

MouseEvent.CLICKハンドラーをセカンダリ ボタンにアタッチし、を呼び出しますevent.stopImmediatePropagation()。これにより、イベントがそれ以上バブリングするのを防ぐことができます。

private function secondaryClickHandler( e:MouseEvent ):void {
    e.stopImmediatePropagation();

    // run click code here
}

したがって、基本的に、クリックはセカンダリ ボタンから発生し、メイン ボタンにバブルアップして、別のハンドラーを起動します。これにより、セカンダリ ボタンから発信された場合に、そのメイン ボタンにヒットしないことが保証されます。

MouseEvent.MOUSE_UP同様に/代わりにそれを行う必要があるかもしれません。下→上→クリックの順番だと思いますが、よく覚えていません。

于 2013-10-29T23:57:16.540 に答える
0

私の質問は実際にはかなり関連性のある 2 つの質問であり、ここではその両方にお答えします。

  1. 「X」ボタンのホバー状態は無視されます

これは少し複雑な解決策でしたが、要点は、 skinning の代わりにカスタムの itemRenderer を作成する必要があったことButtonBarButtonです。

  1. 「X」ボタンのクリックイベントは無視されます

私の質問はこれを主な問題にしているように見えますが、解決策は実際には非常に簡単です。@Zeus と @Josh のどちらのソリューションも機能しなかった理由は、itemrenderer スキンにダウン状態がなかったためです。ボタンはホバー状態にのみ含まれるように設定されているため、X実際には onclick ビューから削除され、そのクリック イベントは発生しませんでした。かなり大きな顔の手のひらの瞬間。

TL;DR -ダウン状態を忘れないでください!

于 2013-10-30T19:30:18.717 に答える