点击事件未在Titanium Appcelerator中触发视图

时间:2016-01-28 23:12:45

标签: appcelerator appcelerator-titanium appcelerator-alloy

在我的控制器中,我通过构建TableView数组并使用View& amp填充它来动态填充TableViewRow行。图像。

这是创建View& amp; ImageView和视图上的点击事件:

// Create product image view
var productImageView = Titanium.UI.createView({
    borderRadius: 5,
    left: 10,
    top: 10,
    bottom: 10,
    width: 130,
    backgroundColor: '#FFFFFF',
    productName: Name,
    imageUrl: ThumbnailUrl,
});
productImageView.add(Titanium.UI.createImageView({
    backgroundColor: '#FFFFFF',
    defaultImage: 'image-missing',
    image: ThumbnailUrl
}));
productImageView.addEventListener('click', function(e) {
    if (e.source.productName && e.source.imageUrl) {
        Alloy.createController('view_product_image', { ProductName: e.source.productName, ImageUrl: e.source.imageUrl }).getView().open({
            modalTransitionStyle: Ti.UI.iPhone.MODAL_TRANSITION_STYLE_COVER_VERTICAL,
            modalStyle: Ti.UI.iPhone.MODAL_PRESENTATION_FORMSHEET
        });
    } else {
        console.log('data not set');
    }
});

当此代码运行时,在表格行中,我可以看到图像。当我点击它时,没有任何反应。我尝试直接在ImageView上附加click事件,但仍然没有任何反应。

为什么点击事件没有被解雇的任何想法?我应该订阅不同的活动吗?

2 个答案:

答案 0 :(得分:2)

您没有收到点击事件,因为您的事件来源是 imageview 且没有 productName 和imageUrl 属性

要接收点击视图事件,您需要将图片视图的touchEnabled属性设置为false。

productImageView.add(Titanium.UI.createImageView({
    backgroundColor: '#FFFFFF',
    defaultImage: 'image-missing',
    image: ThumbnailUrl,
    touchEnabled :false
}));

但是我认为不是为每个视图添加一个监听器,而是可以向tableView添加一个公共监听器,并根据其他人建议的e.source.productName属性处理该事件。

答案 1 :(得分:0)

我尝试了你的代码,它适用于iOS和Android。 也许,你能展示TableView的创作吗?

但是,虽然您的解决方案是正确的,但是由于将创建的侦听器数量,因此在TableViewRow内部而不是在TableViewRow中添加事件侦听器更为优雅且更有效,然后将单击事件的范围缩小到仅图片,您检查e.source是否具有productNameimageURL属性(例如),否则您可以推断出点击位于图片之外。

试试这样:

$.tableView.addEventListener('click', function(e) {
    if (e.source.productName && e.source.imageUrl)
        console.log('hit')
});