1

私はチタンに取り組んでおり、iOS デバイス用に開発しています。私のアプリケーションでは、オブジェクトの応答tableviewから受信したデータを使用する関数によって作成された行を含むセクションで満たされた があります。HTTPClient各行にはビューがあり、ビュー内にはボタンとラベルがあります。

ボタンにはclick正常に動作するイベントがあります。ボタンを格納するビューにクリック イベントを追加しましたが、ビューをクリックしてもイベントは発生しませんが、ボタンをクリックすると、ボタンのイベントとビューのイベントの両方が発生します。ビューのイベントにボタンのイベントとはまったく異なることをさせたいので、これは本来の振る舞いではありません。

ビューをクリックしても、ビューのクリック イベントが発生しないのはなぜですか? ボタンをクリックするとイベントが発生するのはなぜですか?

行を作成する方法は次のとおりです。

function addToDo(title, priority){

    var that = {};      
    var row = Ti.UI.createTableViewRow({height:80});        
    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',
        zIndex:10,
        value: false //value is a custom property in this case here.
    });
    rowLayout.add(checkbox);

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

        item.currentRow.backgroundColor = "#101010";
        this.value = true;
    };

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

    checkbox.addEventListener('click', function(e) {
        if(false == e.source.value) {
            e.source.on(that);
        } else {
            e.source.off(that); 
        }
    });

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

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

    row.add(rowLayout);

    rowLayout.addEventListener('click', function(e){
        // Whatever I put here isn't executed when I click on the rowLayout, instead I have to click the button to fire this event, that shouldn't happen
    });

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

}

この関数は、HTTPClient onload で呼び出されます。

var clientTask = Ti.Network.createHTTPClient({
    onload : function(e){
        var responseTask = JSON.parse(this.responseText);
        var entriesTask = responseTask.tasks;
        var todoSectionView = Ti.UI.createTableViewSection({
            headerTitle : responseTask.name
        });
        data.push(todoSectionView);
        for( var j=0; j < entriesTask.length; j++){
           var tmpRow = addToDo(entriesTask[j].name, entriesTask[j].priority);
           todoSectionView.add(tmpRow);
        }
        // add the data to the tableview
        table.data=data;
        self.updateLayout();
    },
    timeout : 60000
});
4

2 に答える 2

0

おそらく、todoTitleLabelのイベントハンドラーを作成するか、行とは異なる背景色を指定して、行自体をクリックできるかどうかを確認することで、これをテストします。たぶん、その上のオブジェクトがそれをブロックしていますか?おそらく、代わりにクリックイベントをラベルに追加することで、あなたがやろうとしていることを達成できますか?

于 2012-09-13T19:45:29.923 に答える