Ios7 使用Tianium SDK 3.2.0.GA在iOS 7.1中显示重复的optionDialog
我使用的是Tianium SDK 3.2.0.GA,Tianium Studio 3.2.0,iOS SDK是7.0.3,我正在使用7.1.1部署到n iPad上 每次我在应用程序中显示optionDialog时,也会显示一个重复的选项列表,就好像对话框上显示了两个滚动视图一样,可以看出创建了一个重复的选项列表,因为如果我尝试滚动optionDialog,其中一个滚动视图正在滚动,而另一个在后台保持静止 我确保只创建了一个optionDialog,这是我的代码:Ios7 使用Tianium SDK 3.2.0.GA在iOS 7.1中显示重复的optionDialog,ios7,titanium,titanium-mobile,appcelerator-mobile,Ios7,Titanium,Titanium Mobile,Appcelerator Mobile,我使用的是Tianium SDK 3.2.0.GA,Tianium Studio 3.2.0,iOS SDK是7.0.3,我正在使用7.1.1部署到n iPad上 每次我在应用程序中显示optionDialog时,也会显示一个重复的选项列表,就好像对话框上显示了两个滚动视图一样,可以看出创建了一个重复的选项列表,因为如果我尝试滚动optionDialog,其中一个滚动视图正在滚动,而另一个在后台保持静止 我确保只创建了一个optionDialog,这是我的代码: function setMult
function setMultiOptions()
{
// se crea un option dialog nuevo cada vez que se cambien los options
var optionDialog = Ti.UI.createOptionDialog({
title : 'Selecciona una opción:',
options : extraMultiOptions,
cancel : parseInt(extraMultiOptions.length - 1)
});
optionDialog.addEventListener('click', function(e){
// si el indice seleccionado no es el de cancelar, procede con la seleccion de la opcion
if(e.index !== parseInt(extraMultiOptions.length - 1))
{
$.ExtraMultiOptionValue.text = extraMultiOptions[e.index];
extraValue = extraMultiOptions[e.index];
if(extraName === 'Entidades')
{
Alloy.Globals.GlobalFunctions.ClearCP();
Alloy.Globals.GlobalFunctions.GetMunicipios(e.index + 1);
}
else if(extraName === 'Municipios')
{
Alloy.Globals.GlobalFunctions.ClearCP();
}
}// de lo contrario, limpia el campo y la variable de value
else
{
$.ExtraMultiOptionValue.setText('');
extraValue = '';
}
});
// si hay options, gestiona el comportamiento
if(extraMultiOptions.length > 0)
{
// si son entidades, asigna un evento unico para el campo
if(extraName === 'Entidades')
{
singletapCallback = function(e){
$.ShowMultiOptionView.animate({
backgroundColor : categoryColor
}, function(){
$.ShowMultiOptionView.animate({
backgroundColor : 'transparent'
});
});
optionDialog.show();
};
$.ExtraMultiOptionData.addEventListener('singletap', singletapCallback);
} // si son municipios, reemplaza la funcion global para el contexto nuevo (municipios cambian en base a entidad, por lo tanto el contexto en municipios siempre cambia y no es unico)
else if(extraName === 'Municipios')
{
Alloy.Globals.GlobalFunctions.SingletapHandler = function(e){
Ti.API.info('single tap handler');
$.ShowMultiOptionView.animate({
backgroundColor : categoryColor
}, function(){
$.ShowMultiOptionView.animate({
backgroundColor : 'transparent'
});
});
optionDialog.show();
};
if(!singletapAdded)
{
Ti.API.info('event is not added yet, adding now...');
singletapAdded = true;
$.ExtraMultiOptionData.addEventListener('singletap', function(e){
if(canShowDialog)
{
Alloy.Globals.GlobalFunctions.SingletapHandler();
}
});
}
else
{
Ti.API.info('event has been added');
}
} // si no es ni entidad ni municipio, agrega un evento sin nombre
else
{
$.ExtraMultiOptionData.addEventListener('singletap', function(e){
$.ShowMultiOptionView.animate({
backgroundColor : categoryColor
}, function(){
$.ShowMultiOptionView.animate({
backgroundColor : 'transparent'
});
});
optionDialog.show();
});
}
}
}
在我的函数中,我创建了一个充满选项数组的optionDialog实例,设置了它的click事件,然后检查选项的数量是否大于0,然后检查名为extraName的变量的值,该变量指示optionDialog中存在何种选项。如果extraName的值为“Entidades”,我将向显示optionDialog的视图添加一个唯一的singletap事件,如果值为“市政”,我将覆盖一个全局函数,并仅将singletap事件一次分配给显示optionDialog的视图,该事件调用全局函数,该函数将根据为optionDialog发送的选项进行更改。如果extraName的值既不是“Entidades”也不是“市政”,那么我将向singletap事件添加一个匿名函数
在每种情况下,我都添加了信息来检查singletap事件是否被添加了不止一次,但该事件只被添加了一次
出于某种原因,optionDialog显示为两个滚动视图,其中包含选项,我还没有找到解释为什么会发生这种情况,或者为什么会发生这种情况
我留下这个截图
我要尝试的第一件事是在函数外部删除optionDialog的实例化和事件处理程序。您不需要在该函数中使用它,而且它将简化调试。我以前遇到过类似的情况,它在创建时调用事件处理程序。只是一个想法
接下来,我会考虑把一个大的选项列表放在一个表中而不是optScript对话框。
让我知道这是否有帮助。解决方案是从3.2.0开始添加了一个名为opaquebackground的新属性,在iPad上必须设置为true以避免此问题 遗憾的是,在文档开始时,文档没有在特定于平台的注意事项上警告您,因此很容易遗漏,因为文档中的所有属性都已折叠 更糟糕的是,谷歌搜索Tianium Option Dialog ghost或Tianium Option Dialog duplicate根本无法将您指向此属性,您必须使用确切的单词ghosting,这对我们中许多非英语母语的人来说确实是陌生的 我打开了一张JIRA通知单,要求更新文档,但让我们看看他们是否介意,因为我得到的回复有点咄咄逼人。查一下JIRA的票