Search code examples
titaniumappceleratortitanium-mobileappcelerator-mobiletitanium-alloy

Close NavigationWindow (modal ) from another js file in Titanium IOS7


I am migrating a current project to 3.1.3 . I need a close button on the modal window so i had to use a NavigationWindow as suggested in the IOS7 migration guide. Here is what i have

btnSubscription.addEventListener('click', function(e) {
Ti.API.info('Subscription Button Clicked.');
openWindow("paymentsubscription.js", "Subscription");
});

function openWindow(url, title) {
var win = Ti.UI.createWindow({
    url : url,
    backgroundColor : 'white',
    modal : true,
    title : title
});


if (Titanium.Platform.osname !== "android") {
var winNav = Ti.UI.iOS.createNavigationWindow({
    modal: true,
    window: win
});
}
if (Titanium.Platform.osname !== "android") {
    winNav.open();
}
else {
    win.open();
}
}

Now on paymenttransaction.js i was previously doing this when i was using titanium 2.x

var mainWindow = Ti.UI.currentWindow;

var mainWinClose = Ti.UI.createButton({
style : Ti.UI.iPhone.SystemButtonStyle.DONE,
title : 'close'
});

if (Titanium.Platform.osname !== "android") {
    mainWinClose.addEventListener('click', function() {"use strict";
mainWindow.close();
});
responseWindow.setRightNavButton(responseWinRightNavButton);
mainWindow.setRightNavButton(mainWinClose);
}

The problem i am facing is that i need to close winNav in the case of IOS and not win anymore. In paymenttransaction.js i was previously using

var mainWindow = Ti.UI.currentWindow;

But now i need to close the navigation window(winNav) and this does not hold good anymore. Is there anyway to do this? . Is there a Ti.UI.currentWindow equivalent for NavigationWindow ?


Solution

  • You aren't using the navigationWindow properly. You shouldn't be calling open() on a window when you use one.

    You are looking for:

    `winNav.openWindow(yourWindow)

    Also when you are creating a new window, pass a pointer to your navigationWindow in the constructor, then you can close the window properly. Don't create a window like that use CommonJS's require() to return your window:

    paymenttransaction.js:

    function paymentTransactionWindow(navGroup, otherArgs) { 
    
    var mainWinClose = Ti.UI.createButton({
        style : Ti.UI.iPhone.SystemButtonStyle.DONE,
        title : 'close'
    });
    
    var win = Ti.UI.createWindow({
        url : url,
        backgroundColor : 'white',
        modal : true,
        title : title,
        rightNavButton: mainWinClose
    });
    
    
    
    if (Titanium.Platform.osname !== "android") {
        mainWinClose.addEventListener('click', function() {
        navGroup.closeWindow(win);
    });
    
        return win;
    
    }
    
    module.exports = paymentTransactionWindow;
    

    Then in your previousWindow:

    PaymentTransactionWindow = require('/paymentTransactionWindow); //the filename minus .js
    var paymentTransactionWindow = new PaymentTransactionWindow(winNav, null);
    mainNav.openWindow(paymentTransactionWindow);
    

    watch some of the videos on commonJS: http://www.appcelerator.com/blog/2011/08/forging-titanium-episode-1-commonjs-modules/