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

时间:2016-07-20 17:59:17

标签: appcelerator titanium-mobile appcelerator-titanium appcelerator-mobile appcelerator-studio

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

我有一个tableView,它附加了一个click事件并且用行填充:

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),警报返回'row',并且不调用任何函数。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

原因是父容器有“触摸启用”功能。属性设置为false。如果这样,孩子就不会开火。在Android上它会工作。在iOS上它不会。所以只需修改这样的代码:

  $.ajax({
     url: 'https://npiregistry.cms.hhs.gov/api/?number=1902072620',
     dataType: 'JSONP',
     jsonpCallback: 'callback',
     type: 'GET',
     success: function (data) {
        console.log(data);
     }
   });