スタイルの適用が無効になる

久しぶりの更新となってしまいました。

大火事プロジェクトも悲惨な状況は過ぎ去り、ちょっとづつ落ち着きを
取り戻しつつある今日この頃、皆様如何お過ごしでしょうか。


さて、本日FlexのTabNavigatorのタブの色を変更しようとして大いに
はまりましたので記録として残したいと思います。


■タブごとにスタイルを適用する

TabNavigatorにタブが3つ登録された状態とすると、以下のように
スタイルを設定すると、
・最初のタブの文字は「赤」
・真ん中のタブの文字は「青」
・最初のタブの文字は「緑」
で表示されます。

tabNavigator.getTabAt(0).styleName = "style1";
tabNavigator.getTabAt(1).styleName = "style2";
tabNavigator.getTabAt(2).styleName = "style3";

.style1 {
  color: #FF0000;
}
.style2 {
  color: #0000FF;
}
.style3 {
  color: #00FF00;
}

ここで落とし穴!!

■スタイルがキャッシュしない?

あるボタンからTabNavigatorのある画面を表示する場合、最初に表示する際は
スタイルが適用された状態なのに、次表示するとスタイルが飛んでしまう状況に
遭遇しました。

意味がわかりません。


■setStyleで解決

色々調べたところ、styleNameはmxmlで指定する分には問題ないが、ActionScript
動的に設定する場合はCSSのクラス名を指定するだけでは駄目なようです。

さて、どうするかということで「setStyle」の登場です。

tabNavigator.getTabAt(0).tab.setStyle("color", 0xFF0000);

上記のようにしているすると、スタイルが飛んでしまう困った状況にはならず
安定して動作しました。


っということで、ちょっとしたTipsでした。