0

私は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;
}

そして、これは私が行のクリックイベントを処理する方法です:

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();
        }
    }
});

イベントを処理するときに背景色を再定義しようとしましたが、行がクリックされたときに色が上書きされる理由がわかりませんが、役に立ちませんでした。私は何が間違っているのですか?

4

2 に答える 2

2

TableViewRowに次のプロパティを追加することでこれを解決しました

selectionStyle : Titanium.UI.iPhone.TableViewCellSelectionStyle.NONE

このプロパティにより、行をタップ/プレス/クリックなどしたときに色や効果が表示されなくなります。

于 2012-11-06T19:44:27.517 に答える
0

ノート:

Titanium.UI.iPhone.TableViewCellSelectionStyleは非推奨になりました

代わりにTitanium.UI.iOS.TableViewCellSelectionStyleを使用してください

于 2016-06-09T08:04:55.840 に答える