首先,请不要推荐我使用原生 iOS/Android 对象,这是一个关于自定义控件的测试,我需要它才能工作。
我在 Android 或 iOS 中使用自定义导航栏时遇到了奇怪的行为。一切似乎都是正确的,直到我在自定义导航栏中直接(通过代码)关闭一个窗口。我第二次用导航栏打开另一个窗口时,旧对象(标签、按钮等)仍然存在。我发布了一个示例:首先,在主窗口中,我在 NavBar 中调用 AddForm:
var ui = require('navigation');
var nav = ui.createNavigatorGroup();
Alloy.Globals.navBar = nav;
nav.open(winAddPill, {animated: true});
当用户按下添加按钮(您看不到,位于表单底部)时,我在保存数据后自动关闭导航中的窗口,使用以下代码:
Alloy.Globals.navBar.close($.win);
如果我这样做,当我现在调用另一个窗口时,例如,显示信息(右侧有一个 DELETE 按钮),标题标签与前一个窗口混合:
Alloy.Globals.navBar.open(winPill, {animated: true});
如您所见,一切都是混合的,这是必须显示的:
如果我继续打开新窗口,一切都还在混合。有什么帮助可以避免这种行为吗?我与这个问题斗争了 4 天,但没有找到解决方案。
最后,我正在使用的自定义导航栏:
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;
};