我正在构建一个Titanium iOS应用程序。我有一个tableview,每行有两个图像和一些其他标签。我希望能够点击每个图像并交换其他图像,我希望能够点击像电话号码这样的标签并调出拨号器。到目前为止,行中任意位置的单击都会交换图像。以下是我的一些代码:
//First I create my table and then call a php file to return some JSON data, then I create my row and define an image
row = Ti.UI.createTableViewRow({
backgroundImage : 'images/openmatchesrowbackground.png',
selectionStyle : Titanium.UI.iPhone.TableViewCellSelectionStyle.NONE,
width : '100%',
height : '180pt',
rowId : i
});
var acceptmatchView = Ti.UI.createView({
left : '0pt',
top : '0pt',
width : '60pt',
height : '60pt'
});
var acceptmatch = Ti.UI.createImageView({
image : 'images/nomatch.png',
left : '0pt',
top : '0pt',
width : '60pt',
action: 'swapImages',
height : '60pt'
});
//Then I add some labels and add everything to the row - Now create my event listener
tableview.addEventListener('click', function(e) {
var imageView = e.row.children[0].children[0];
if (imageView.image == 'images/nomatch.png') {
imageView.image = 'images/match.png';
var matchSelected = json.openmatches[e.rowData.rowId];
var alertWindow = Titanium.UI.createAlertDialog({
title : 'Accept This Match?',
message : 'Are you sure you want to accept this match?' + '\n' + matchSelected.matchtype + '\n' + 'Time: ' + matchSelected.datetime + '\n' + 'At: ' + matchSelected.courtname,
cancel : 1,
buttonNames : ['Yes', 'Cancel']
});
alertWindow.addEventListener('click', function(ev) {
Titanium.API.info("cancel " + ev.cancel);
Titanium.API.info("index " + ev.index);
switch(e.source.action){
//switch(ev.index) {
//case 0:
case 'swapImages':
break;
case 'swapImages':
imageView.image = 'images/nomatch.png';
break;
}
});
alertWindow.show();
} else {
imageView.image = 'images/nomatch.png';
var alertWindow = Titanium.UI.createAlertDialog({
title : 'Cancel This Match?',
message : 'Are you sure you want to cancel this match?',// + '\n' + matchSelected.matchtype + '\n' + 'Time: ' + matchSelected.datetime + '\n' + 'At: ' + matchSelected.courtname,
cancel : 1,
buttonNames : ['Yes', 'Keep Match']
});
alertWindow.addEventListener('click', function(ev) {
Titanium.API.info("cancel " + ev.cancel);
Titanium.API.info("index " + ev.index);
switch(e.source.action) {
case 'swapImages':
break;
case 'swapImages':
imageView.image = 'images/match.png';
break;
}
});
alertWindow.show();
}
});
tableview.setData(tableData);
},
如何编写代码以便它可以处理行中的每个对象?
答案 0 :(得分:1)
除了Dawson Toth的回答,请尝试将bubbleParent属性重置为false。在您的情况下,事件可能会传播到父级。在这里,您已将eventlistener添加到tableViewRow。因此,每次点击孩子都会传播给父母。 bubbleParent
的默认值为true。将bubbleParent
设置为false
不会传播操作。
var acceptmatchView = Ti.UI.createView({
left : '0pt',
top : '0pt',
width : '60pt',
height : '60pt',
bubbleParent: false
});
var acceptmatch = Ti.UI.createImageView({
image : 'images/nomatch.png',
left : '0pt',
top : '0pt',
width : '60pt',
action: 'swapImages',
height : '60pt',
bubbleParent: false
});
答案 1 :(得分:0)
一种方法是向对象添加action: 'swapImages'
等属性,单击该对象时应交换图像。您可以添加其他内容,例如action: 'dial'
。然后在您的点击监听器中:switch (e.source.action) { case 'swapImages': ... break; ... etc }
。在许多应用程序中,这种模式对我来说效果很好。