TableViewRow 子项正在 TableViewRow 而不是其子项 iOS 上触发事件(Appcelerator Titanium)
TableViewRow child is firing event on TableViewRow instead of its child iOS (Appcelerator Titanium)
在 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 是事件的来源(警报 returns 'delete' 和 'deleteShopping' 函数被调用).
在 iOS 上,源始终是行(而不是 ImageView)和警报 returns 'row' 并且不调用任何函数。
错误实际上在 Android 中。 iOS 表现符合预期。由于图像上没有事件侦听器,因此它不应该是来源。该事件冒泡到 TableView,因为这是附加侦听器的地方。
要修复它,您需要在每一行的图像上添加一个事件监听器。
原因是 parent 容器 'touchEnabled' 属性 设置为 false。如果是这样,children 将不会触发事件。在 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);
在 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 是事件的来源(警报 returns 'delete' 和 'deleteShopping' 函数被调用).
在 iOS 上,源始终是行(而不是 ImageView)和警报 returns 'row' 并且不调用任何函数。
错误实际上在 Android 中。 iOS 表现符合预期。由于图像上没有事件侦听器,因此它不应该是来源。该事件冒泡到 TableView,因为这是附加侦听器的地方。
要修复它,您需要在每一行的图像上添加一个事件监听器。
原因是 parent 容器 'touchEnabled' 属性 设置为 false。如果是这样,children 将不会触发事件。在 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);