2011/08/19からのアクセス回数 7675
はじめてTitanium mobileを使った時に、画面の作成をすべてjavaScriptで記述するのに、 驚きました。 しかし、GUIの設定をすべてコーディングすることによって、簡単に画面を使い回すことが できることが分かりました。
ここでは、Interface BuilderとTitanium mobileの連携方法を紹介し、面倒な画面設計を 簡単にしてみましょう。
ここで使用するツールは、Interface BuilderのGUI設定ファイルであるXibファイルを javascriptに変換してくれるXib2JSです。
また、Xib2JSを使用するには、AdobeのAIR も合わせてインストールが必要です。
Xib2JSのサポートしている部品は、
です。
Xib2JSの使い方は、とても簡単です。
Interface Builderで作成したxibファイルをXib2JSにドラックするだけです。
以下は、今回テストに使ったtest.xibをドラッグしたときの画面です。
Xib2JSで生成する画面は、
のようにViewとして作成します。
また、作成した部品の名前を定義すると、その名前がjavascriptの部品の変数名になります。 部品の名前は、Inspectorウィンドウでセットします。
それでは、Demoプログラムの記録の入力画面を例にXib2JSの使い方を説明します。
Xib2JSで変換されたプログラムは、以下のようになります(一部)。
// Custom View var view0 = Titanium.UI.createView({ width: 320, height: 460, backgroundColor: '#aaaaaa' }); var weightField = Titanium.UI.createTextField({ borderStyle: Titanium.UI.INPUT_BORDERSTYLE_ROUNDED, left: 80, top: 236, width: 160, height: 31, value: '', color: '#000000' }); view0.add(weightField);
Xib2JSで生成されたコードと他の部分の関係が疎になるように、プログラムを以下のような構成にします。 *1
// Xib2JSで生成されたコード < Xib2JSで生成されたコード>をここにペーストまたはインクルード // Xib2JSのビューとカレントウィンドウの結合 var win = Ti.UI.currentWindow; win.add(view0); // ← 生成されたコードのルートビューがview0だからこれをウィンドウに追加 // 部品の初期値をセット <日付や体重の初期値をセット> // コールバック関数をセット <保存やキャンセルボタンのコールバック関数を定義し、セットする>
最終的なrecord_window.jsは、次のようになりました。
// Xib2JSで生成されたコード Ti.include('xib2js_record.js'); // Xib2JSのビューとカレントウィンドウの結合 var win = Ti.UI.currentWindow; win.add(view0); // ← 生成されたコードのルートビューがview0だからこれをウィンドウに追加 // 部品の初期値をセット datePicker.value = new Date(win.record.at); weightField.value = ""+win.record.weight; // Xibの定義が正しく反映されない部分 datePicker.type = Titanium.UI.PICKER_TYPE_DATE; datePicker.locale = Titanium.Locale.currentLocale; // コールバック関数をセット var selectedDate = datePicker.value; datePicker.addEventListener( 'change', function (e) { selectedDate = e.value; }); saveButton.addEventListener( 'click', function () { var record = {}; record.id = win.record.id; record.weight = weightField.value; var at = selectedDate; record.at = at.toDateString(); Ti.App.fireEvent(win.func, record); win.close(); }); cancelButton.addEventListener('click', function() { win.close(); }); var deleteCallback = function(e) { Ti.App.fireEvent('delete_row', win.record); win.close(); }; Ti.include('navigation.js'); var navi = new Navigation(); navi.setup({ android: { rightButton: {title: 'Delete', icon: 'dark_x.png', callback : deleteCallback} } });
このようにGUIのコードとそれを制御するコードを切り分けることで、 プログラムがすっきりすることが分かって頂けると思います。
最後に作成した画面のiPhoneシミュレーターの画面をお見せして終わります。
皆様のご意見、ご希望をお待ちしております。