【问题标题】:How can I fix Appcelerator's "Navigation Controller" to work with a TabGroup as the base window?如何修复 Appcelerator 的“导航控制器”以使用 TabGroup 作为基本窗口?
【发布时间】:2012-01-11 07:18:29
【问题描述】:

我一直在查看 appcelerator Vimeo 频道上的一些 Titanium Appcelerator 教程,更具体地说是这个:A Cross-Platform Navigation Controller。我发现将它与基本应用程序集成相当容易,但我在让它与 tabGroups 一起工作时遇到了一些麻烦。

问题在于,在创建选项卡并将其放入 tabGroup 时,tabGroup 窗口本身似乎没有放入导航控制器的堆栈中。 Here is the code for that controller。基本上,这意味着如果我从 tabGroup 点击进入新窗口,我不会得到原始窗口的“后退按钮”。但是,如果我进一步单击,子序列窗口确实具有此“后退按钮”功能。

知道是什么原因造成的吗?代码的基本概述如下,NavigationController 代码如上链接。提前感谢您的帮助。

app.js:

(function() {
    var NavigationController = require('NavigationController');
    var windowObject = require('iPhoneWindow');
    new windowObject(new NavigationController()).open();
});

iPhoneWindow.js:

exports.iPhoneWindow = function(navController) {
    var NewsView = require('newsView');
    var instance = Ti.UI.createTabGroup({
        backgroundColor: '#FFF'
    });

    var newsTab = Ti.UI.createTab({
        window: new NewsView(navController),
        title: 'News'
    });

    instance.addTab(newsTab);

    return instance;
};

newsView.js:

exports.newsView = function(navController) {
    var instance = Ti.UI.createWindow({
        title: 'News',
        backgroundColor: '#000';
    });
    var button = Ti.UI.createButton({
        title: 'newsButton',
        height: 60,
        width: 180,
        top: 150
    });
    button.addEventListener('click', function() {
        navController.open(new exports.newsView(navController));
    });
    instance.add(button);

    return instance;
};

【问题讨论】:

    标签: javascript navigation appcelerator titanium-mobile


    【解决方案1】:

    您不需要使用带有 TabGroup 的跨平台导航控制器 - 每个选项卡都有自己的导航堆栈,iOS 设备上的导航堆栈会自动为您提供一个包含所有装饰的导航控制器。要在堆栈上打开窗口,您需要获取活动选项卡,然后在其上打开窗口 - 所以将您的选项卡组传递给 newsView:

    exports.newsView = function(tabGroup) {
        var instance = Ti.UI.createWindow({
            title: 'News',
            backgroundColor: '#000';
        });
        var button = Ti.UI.createButton({
            title: 'newsButton',
            height: 60,
            width: 180,
            top: 150
        });
        button.addEventListener('click', function() {
            tabGroup.activeTab.open(new exports.newsView(tabGroup));
        });
        instance.add(button);
    
        return instance;
    };
    

    【讨论】:

    • 啊哈!谢谢你,好先生,这很好:)。我希望有一些正确使用 Titanium 的可靠指南。
    • 不客气!是的,我自己最近才发现这一点并且有同样的反应——似乎没有任何地方记录在案。我认为情况正在慢慢改善,但欢迎提供一些指南。
    • 太棒了!我只是花了半天时间试图解决这个问题,你给了我解决方案!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2020-03-20
    • 1970-01-01
    相关资源
    最近更新 更多