0

在我的控制器中,我TableView通过构建一个数组TableViewRow并用视图和图像填充它来动态填充行。

这是在视图上创建 View & ImageView 和 click 事件的代码:

// 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 上附加点击事件,但仍然没有任何反应。

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

4

2 回答 2

2

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

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

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

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

于 2016-01-29T05:28:32.827 回答
0

我试过你的代码,它适用于我在 iOS 和 Android 上。也许,你能展示一下 TableView 的创建吗?

但是,尽管您的解决方案是正确的,但由于将创建的侦听器的数量,最好在 TableView 而不是在 TableViewRow 内添加事件侦听器,然后将点击事件的范围缩小到图像,您检查是否e.sourceproductNameimageURL属性(例如),否则您可以推断点击在图像之外。

试试这样:

$.tableView.addEventListener('click', function(e) {
    if (e.source.productName && e.source.imageUrl)
        console.log('hit')
});
于 2016-01-29T02:24:58.143 回答