在我的控制器中,我通过构建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事件,但仍然没有任何反应。
为什么点击事件没有被解雇的任何想法?我应该订阅不同的活动吗?
答案 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
是否具有productName
和imageURL
属性(例如),否则您可以推断出点击位于图片之外。
试试这样:
$.tableView.addEventListener('click', function(e) {
if (e.source.productName && e.source.imageUrl)
console.log('hit')
});