0

まず第一に、ネイティブの 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 に追加しました。ここで質問を見ることができ、プロジェクトはここにあります。

4

1 に答える 1

0

f* * *g の問題が見つかりました!!!

コードを詳細に分析し、見つけました。すべての問題は、新しい navView が常に構成の新しいオブジェクト用に準備されていることにあります。たとえば、2 つのウィンドウが開いていて、3 つの navView があるとします。数字の 3 は明確で、内部には何もありません。新しいウィンドウを開く前に、setLeftButton の準備ができているだけです。

しかし、オブジェクトを含む navView 2 で実際のウィンドウを閉じると、コードは "popNavView" を作成し、最後の (空の) navView 3 のみを削除し、実際の navView 2 をすぐに使用できるように設定します...内部のすべての実際のオブジェクトとともに.

簡単な解決策は... popNavBar 内の次の簡単な行で、設定後に削除します。

function popNavBar() {
      navViews.pop();
      navView = navViews[navViews.length - 1];
      navView.removeAllChildren();
};

機能的なカスタム NavBar を使用したい他のユーザーが利用できるように、github コードをやり直します。

于 2013-09-05T09:22:03.730 に答える