Titanium - содержимое цветов TableViewRow переопределяется, когда я щелкаю строку

Я работаю над Titanium и разрабатываю для iOS, и я создал TableView с кнопкой в ​​каждой строке, и когда вы нажимаете на строку, в строку добавляется еще одна кнопка, при повторном нажатии кнопка удаляется, каждый элемент управления имеет свой собственный поведения и собственного стиля. Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю на строку, стиль кнопок переопределяется. Я имею в виду, что если какая-либо из кнопок имеет определенный цвет фона, указанный цвет будет переопределен и заменен backgroundColor строки, то же самое происходит и с цветом шрифта.

Это скриншот того, как строка выглядит до нажатия:

введите здесь описание изображения

Следующий — когда я нажимаю строку и добавляется другая кнопка:

введите здесь описание изображения

Посмотрите, как цвет фона маленькой серой кнопки изменяется на тот же цвет, что и цвет фона строки. То же самое происходит, когда я нажимаю строку, чтобы кнопка исчезла, и снова нажимаю строку, чтобы она снова появилась:

введите здесь описание изображения

Вот как я определяю строку и кнопки:

function addToDo(title, priority, taskId){
    var that = {};

    var row = Ti.UI.createTableViewRow({
        height:80, 
        value : taskId,
        backgroundSelectedColor : 'transparent',
        selectedBackgroundColor : 'transparent',
        selectedColor : 'transparent',
        item_type : 'ROW'
    });

    that.currentPriority = priority;

    that.resolveColor = function(tmpPriority){
        switch(tmpPriority){

            case 0: backgroundColorPriority = "#da362a"; break;
            case 1: backgroundColorPriority = "#da6c2a"; break;
            case 2: backgroundColorPriority = "#da962a"; break;
            case 3: backgroundColorPriority = "#dacb2a"; break;             
        }
        return backgroundColorPriority;
    }

    var rowLayout = Ti.UI.createView({
        backgroundColor : 'transparent'
    });

    var checkbox = Ti.UI.createButton({
        top: 25,
        left: 5,
        width: 30,
        height: 30,
        borderColor: 'white',
        borderWidth: 2,
        borderRadius: 1,
        backgroundColor: '#b1b1b1',
        backgroundImage: 'NONE',
        item_type : 'CHECKBOX',
        value: false //value is a custom property in this case here.
    });

    row.add(checkbox);

    //Attach some simple on/off actions
    checkbox.on = function(item) {
        this.backgroundColor = '#62b425';
        item.backgroundColor = "#101010";
        this.value = true;
    };

    checkbox.off = function(item) {
        this.backgroundColor = '#b1b1b1';
        item.backgroundColor = that.resolveColor(item.currentPriority);
        this.value = false;
    };

    // Create a Label.
    var todoTitleLabel = Ti.UI.createLabel({
        text : title,
        color : 'white',
        font : {fontSize:11},
        left : 40,
        top : 35,
        textAlign : 'center'
    });

    // Add to the parent view.
    row.add(todoTitleLabel);

    // Create a Button.
    var deleteTask = Ti.UI.createButton({
        title : 'Borrar',
        height : 50,
        width : 100,
        top : 85,
        left : 110,
        item_type : 'DELETEBUTTON',
        style : Ti.UI.iPhone.SystemButtonStyle.PLAIN,
        color : '#000',
        backgroundSelectedColor : '#F7F8E0',
        selectedColor : '#F7F8E0',
        backgroundColor : '#F7F8E0'
    });

    // Add to the parent view.
    row.expand = function(){
        this.height=160;
        row.add(deleteTask);            
    };

    row.contract = function(){
        this.height=80;
        row.remove(deleteTask);

    };

    var backgroundColorPriority = that.resolveColor(that.currentPriority);      
    row.backgroundColor = backgroundColorPriority;
    that.currentRow = row;

    checkbox.container = that.currentRow;

    return that;
}

И вот как я обрабатываю событие click в строке:

table.addEventListener('click', function(e){
    if(e.source.item_type == 'CHECKBOX'){
        if(false == e.source.value) {
            e.source.on(e.source.container);
        } else {
            e.source.off(e.source.container);   
        }
    }else if(e.source.item_type == 'DELETEBUTTON'){
        alert('delete button');
    }else if(e.source.item_type == 'ROW'){
        if(!borraState){
            Ti.API.info('IN ' + JSON.stringify(e));
            taskId = e.row.value;
            todoId = tasks[taskId].todoId;
            index = e.index;
            borraLayout.animate(borrarLayoutIn);
            e.source.expand();
            borraState = true;
        }else{
            Ti.API.info('OUT ' + JSON.stringify(e));
            borraLayout.animate(borrarLayoutOut);
            borraState = false;
            e.source.contract();
        }
    }
});

Я не понимаю, почему цвета переопределяются при щелчке строки, хотя я пытался переопределить цвета фона при работе с событиями, но безрезультатно. Что я делаю неправильно?


person Uriel Arvizu    schedule 17.09.2012    source источник


Ответы (2)


Я решил это, добавив следующее свойство в свой TableViewRow

selectionStyle : Titanium.UI.iPhone.TableViewCellSelectionStyle.NONE

Это свойство позволяет не отображать цвет или эффект при касании/нажатии/щелчке строки и т. д.

person Uriel Arvizu    schedule 06.11.2012

Примечание:

Titanium.UI.iPhone.TableViewCellSelectionStyle устарел

вместо этого используйте Titanium.UI.iOS.TableViewCellSelectionStyle

person Gkueny    schedule 09.06.2016