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

时间:2014-05-27 18:17:29

标签: ios7 titanium titanium-mobile appcelerator-mobile

我正在使用Titanium SDK 3.2.0.GA,Titanium Studio 3.2.0,我的iOS SDK是7.0.3,我正在部署到带有7.1.1的n 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的变量的值。指示optionDialog中存在哪种选项。如果extraName的值为'Entidades',我将向视图中添加一个唯一的singletap事件,该视图将显示optionDialog,如果值为'Municipios',我将覆盖一个全局函数,并仅将onetap事件分配给显示optionDialog的视图,该事件调用全局函数,该函数将根据为optionDialog发送的选项进行更改。如果extraName的值既不是'Entidades'也不是'Municipios',那么我会在singletap事件中添加一个匿名函数。

在每种情况下,我都添加了信息来检查单击事件是否被添加了多次,但事件只被添加了一次。

由于某种原因,optionDialog显示时带有两个带有选项的滚动视图,我没有找到解释为什么会发生这种情况或者如何实现这一点的解释。

我留下这个截图

enter image description here

2 个答案:

答案 0 :(得分:0)

我要尝试的第一件事是删除函数外的optionDialog的实例化和事件处理程序。你不需要它在该函数内部,而且它将简化调试。我之前碰到过类似的东西,它在创建时调用了事件处理程序。只是一个想法。

接下来,我会考虑在表格中放置一个大的选项列表而不是optionsDialog框。

让我知道这是否有帮助。

答案 1 :(得分:0)

此解决方案是自3.2.0以来添加的一个名为 opaquebackground 的新属性,必须在iPad上将其设置为true以避免此问题。

遗憾的是,文档在文档开头时没有根据平台特定的注意事项向您发出警告,因此很容易错过,因为文档中的所有属性都已折叠。

更糟糕的是谷歌搜索钛选项对话鬼钛选项对话复制根本没有指引你到这个属性,你必须使用确切的单词重影对于我们这些不是母语为英语的人而言,这真的很陌生。

我开了一张请求更新文件的JIRA票,但让我们看看他们是否打扰,因为我得到的回应有点激进。查看JIRA票证here