![](/img/trans.png)
[英]Text not visible in AlertDialog for iOS7 using Titanium 3.1.3.GA
[英]Duplicated optionDialog showing in iOS 7.1 using Titanium SDK 3.2.0.GA
我正在使用Titanium SDK 3.2.0.GA,Titanium Studio 3.2.0,我拥有的iOS SDK是7.0.3,并且正在使用7.1.1部署到iPad。
每次我在应用程序中显示一个optionDialog时,也会显示一个重复的选项列表,就好像对话框中显示了两个滚动视图一样,一个可以告诉您创建了一个重复视图,因为如果我尝试滚动optionDialog,则其中一个滚动视图正在滚动,而另一个在背景中保持静止。
我确保只创建一个optionDialog,这是我的代码:
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的变量的值,该变量指示哪种类型?选项对话框中包含选项集。 如果extraName的值是'Entidades',则向视图中显示optionDialog的视图中添加唯一的singletap事件,如果值是'Municipios',则我会覆盖全局函数,并且仅将一次singletap事件分配给显示optionDialog的视图,事件将调用全局函数,该函数将根据为optionDialog发送的选项进行更改。 如果extraName的值既不是'Entidades'也不是'Municipios',则将匿名函数添加到singletap事件中。
在每种情况下,我都添加了信息,以检查singletap事件是否被添加了一次以上,但是该事件仅被添加了一次。
由于某种原因,optionDialog带有两个带有选项的滚动视图,我还没有找到解释为什么发生这种情况或什至是可能的。
我留下这个屏幕截图
我要尝试的第一件事是在函数外部删除optionDialog的实例化和事件处理程序。 您无需在该函数中使用它,而且它将简化调试。 我之前遇到过类似的情况,它在创建时调用了事件处理程序。 只是一个想法。
接下来,我会考虑将这么大的选项列表而不是optionsDialog放在表中。
让我知道这是否有帮助。
解决方案是自3.2.0 版本以来添加的新属性,称为opaquebackground ,必须在iPad上将此属性设置为true,以避免出现此问题。
遗憾的是,文档没有在文档开始时就平台特定注意事项警告您,因此,由于文档中的所有属性均已折叠,因此很容易错过。
更糟糕的是,谷歌搜索“ 钛期权对话框幻影”或“ 钛期权对话框复本”根本无法将您定向到该属性,您必须使用确切的单词“ 幻影” ,这对我们许多不讲英语的人来说确实很陌生。
我打开了一张JIRA票证,要求更新文档,但让我看看它们是否会因为我收到的回复有点激进而困扰。 在此处检查JIRA票。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.