TableViewRow 子项正在 TableViewRow 而不是其子项 iOS 上触发事件(Appcelerator Titanium)

TableViewRow child is firing event on TableViewRow instead of its child iOS (Appcelerator Titanium)

在 iOS 上,单击 TableViewRow 子级会在 TableViewRow 而不是其子级上触发事件。如何解决?

我有一个 tableView,它附加了点击事件并填充了行:

var tableView = Ti.UI.createTableView({
    populateData: populateData
});

tableView.addEventListener('click', tableViewClick);

行很简单并添加了视图:

var row = Ti.UI.createTableViewRow({
    type: 'row',
    height: 70,
    className: 'notes',
});

       var container = Ti.UI.createView({
            left: 15,
            width: Ti.UI.SIZE,
            touchEnabled: false,
        });

            var image = Ti.UI.createImageView({
                image: '/images/usuwanie.png',
                width: 35,
                height: 35,
                type: 'delete',
                id: data.id,
                searchType: data.type
            });

        container.add(image);

row.add(container);

点击动作识别触发事件的对象:

var tableViewClick = function(e) {

    var type = e.source.type;
    var id = e.source.id;
    var searchType = e.source.searchType;
    var additionalText = e.source.additionalText;
    alert(e.source.type);
    switch(type) {
        case 'delete':
            deleteShopping(id,searchType);
            break;
        case 'edit': 
            editShopping(id, searchType, additionalText);
            break;
    }

};

它在 Android 上完美运行 - 如果我单击 imageView,则 imageView 是事件的来源(警报 returns 'delete' 和 'deleteShopping' 函数被调用).

在 iOS 上,源始终是行(而不是 ImageView)和警报 returns 'row' 并且不调用任何函数。

错误实际上在 Android 中。 iOS 表现符合预期。由于图像上没有事件侦听器,因此它不应该是来源。该事件冒泡到 TableView,因为这是附加侦听器的地方。

要修复它,您需要在每一行的图像上添加一个事件监听器。

原因是 parent 容器 'touchEnabled' 属性 设置为 false。如果是这样,children 将不会触发事件。在 Android 上它将起作用。在 iOS 上不会。所以只需要这样修改代码:

var row = Ti.UI.createTableViewRow({
    type: 'row',
    height: 70,
    className: 'notes',
});

   var container = Ti.UI.createView({
        left: 15,
        width: Ti.UI.SIZE,
        //touchEnabled: false,
        //touchEnabled above has to be commented
    });

        var image = Ti.UI.createImageView({
            image: '/images/usuwanie.png',
            width: 35,
            height: 35,
            type: 'delete',
            id: data.id,
            searchType: data.type
        });

    container.add(image);

row.add(container);