繁体   English   中英

使用Titanium SDK 3.2.0.GA在iOS 7.1中显示重复的optionDialog

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM