前回、Part1では3つのクラスを継承してクラスを再定義すればいいというとこまで、中身を見ていきました。

もっと早くPart2を書こうとは思ったのですが、自分の方のクラスが閉じる場合やら、閉じない場合やら、
その他、いろいろと機能をつけてしまい、シンプルなものとはかけ離れてしまいました。
それで、とりあえず最初に戻って、白紙状態のものを再度作成することにしました。

ということで・・・・

改めて、その3つのクラスは

  1. mx.containers.TabNavigator
  2. mx.controls.TabBar
  3. mx.controls.tabBarClasses.Tab (タブの本体)

です。これらを再定義したクラス名を以下の通りとします。

  1. CustomTabNavigator
  2. CustomTabBar
  3. CustomTab (タブ本体です)

さて、今回のPart2ではとりあえず、拡張するための土台部分を作成します。
要は、これら拡張クラスを作成しますが、全くTabNavigatorと同じ動きをさせます。

さて、話はもどって、まずは3つのクラスを作成します。

最初は、もっともコアなCustomTabクラスです。こちらは、のちのちもっとも変更されるクラスですが、
このクラスが呼ばれるための仕組みを理解するということで、このクラスには最初何もありません。

[AS]
package com.coltware.cise.ui {
import mx.controls.tabBarClasses.Tab;
public class CustomTab extends Tab{
public function CustomTab() {
super();
}
}
}
[/AS]

これで、Tabと全く同じ動きをするクラスの完成です。
次に、このクラスを呼ぶクラスである、CustomTabBarクラスを作成することにしましょう。

[AS]
package com.coltware.cise.ui {
import mx.controls.TabBar;
import mx.core.mx_internal;
import mx.core.ClassFactory;
use namespace mx_internal;
public class CustomTabBar extends TabBar{
public function CustomTabBar() {
super();
navItemFactory = new ClassFactory(CustomTab);
}
}
}
[/AS]
前のクラスよりは、ちょっと手が入っています。
前回の記事でもこの部分については述べたと思います。

さて、CustomTabBarからCustomTabが呼ばれるところまでできたので、後は、CustomTabNavigatorから、
CustomeTabBarを呼ぶようにします。

[AS]
package com.coltware.cise.ui {
import mx.containers.TabNavigator;
import mx.styles.StyleProxy;

public class CustomTabNavigator extends TabNavigator{
public function CustomTabNavigator() {
super();
}

override protected function createChildren():void{

// ここで親のcreateChildrenを呼んではいけない
//super.createChildren();

if(!tabBar){
var _tabBar:CustomTabBar = new CustomTabBar();
tabBar = _tabBar;
tabBar.name = “tabBar”;
tabBar.focusEnabled = false;
tabBar.styleName = new StyleProxy(this, tabBarStyleFilters);
rawChildren.addChild(tabBar);
}

// ここで親のcreateChildrenを呼ぶ
super.createChildren();
}
}
}
[/AS]
ここは、createChildrenを再定義します。
ここでは、基本的にはTabNavigatorのcreateChildrenの中身を見て、該当の部分(new TabBar()している部分)をCustomTabBarにしてしまえばいいのですが、
super.createChildren()を最初に呼ぶのではなく、最後に呼んでください。
これで、TabNavigatorの if(!tabBar) の部分内の処理を実行しなくなります。

これで、準備完了です。
次回は、Tabの中身を実装し、閉じるボタンを作成していきます。(予定)

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2009年6月
« 5月   7月 »
1234567
891011121314
15161718192021
22232425262728
2930  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ