まず第一に、ネイティブの iOS/Android オブジェクトを使用することをお勧めしないでください。これはカスタム コントロールに関するテストであり、動作させるために必要です。
Android または iOS でカスタム Navbar を使用しているときに、奇妙な動作が発生します。カスタム navBar で (コードによって) ウィンドウを直接閉じるまで、すべてが正しいようです。navBar で別のウィンドウを開くと、古いオブジェクト (ラベル、ボタンなど) が残っています。例を投稿します。まず、メイン ウィンドウから NavBar の AddForm を呼び出します。
var ui = require('navigation');
var nav = ui.createNavigatorGroup();
Alloy.Globals.navBar = nav;
nav.open(winAddPill, {animated: true});
ユーザーが [追加] ボタンを押すと (表示されず、フォームの下部にあります)、次のコードを使用して、データを保存した後、ナビゲーションのウィンドウを自動的に閉じます。
Alloy.Globals.navBar.close($.win);
これを行うと、たとえば show info (右に [削除] ボタンがある) などの別のウィンドウを呼び出すと、タイトル ラベルが前のウィンドウと混ざってしまいます。
Alloy.Globals.navBar.open(winPill, {animated: true});
ご覧のとおり、すべてが混在しています。代わりに、これを表示する必要があります。
新しいウィンドウを開き続けると、すべてが混ざり合っています。この動作を回避するための助けはありますか? 私はこの問題と4日間戦っていましたが、解決策が見つかりません。
最後に、私が使用しているカスタム navBar:
exports.createNavigatorGroup = function() {
var me = {};
var navViews = []; // A stack of navigation bars
var navView;
function pushNavBar() {
navView = Ti.UI.createView({
top: 0,
height: 44,
backgroundColor: '#BBB'
});
navViews.push(navView);
};
function popNavBar() {
navViews.pop();
navView = navViews[navViews.length - 1];
};
// Make sure we always have a navView available to prepare
pushNavBar();
me.open = function(win) {
navView.add(Ti.UI.createLabel({
text: win.title,
color: 'black'
}));
navView.win = win;
win.add(navView);
win.navBarHidden = true;
win.open();
// Prepare for the next window
pushNavBar();
};
me.close = function(win) {
if (navViews.length > 1) {
// Close the window on this nav
popNavBar();
win.close();
}
};
return me;
};
また、テスト用の空のウィンドウが 3 つだけのシンプルで実行可能なプロジェクトを GitHub に追加しました。ここで質問を見ることができ、プロジェクトはここにあります。