0

在 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 是事件的来源(警报返回“delete”并调用“deleteShopping”函数)。

在 iOS 上,源始终是行(而不是 ImageView),并且警报返回“行”并且不调用任何函数。

4

2 回答 2

1

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

要修复它,您需要在每一行的图像上添加一个 eventListener。

于 2016-07-21T11:47:59.627 回答
0

原因是父容器将“touchEnabled”属性设置为 false。如果是这样,那么孩子将不会触发事件。在 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);
于 2016-07-26T07:05:00.473 回答