iOSの場合、TableViewRowの子をクリックすると、子ではなくTableViewRowでイベントが発生します。それを修正するには?TableViewRowの子が子iOS(Appcelerator Titanium)の代わりに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はイベントのソースです(アラートは 'delete'を返し、 'deleteShopping'関数が呼び出されます)。
iOSでは、ソースは常に(ImageViewではなく)行であり、警告は「行」を返し、関数は呼び出されません。
私はので、しかし、場合、我々はtableViewRowを持つようにしたい場合は、我々はテーブルビューにリスナーを追加しないでくださいよりも、リスナーが直接電源に接続しなければならないと考えていることを期待していませんソースとして。このアプローチは、より良い要求と少ない要求(すべての行に対して1つのリスナではなく1つのリスナ)として文書化されています。 あなたが言うようにコードを変更することを考えましたが、ユーザーがクリックできる行に2つのイメージがあります。私は80以上の行を持っている場合、私は160人のリスナーを持っています。それは良く見えない... – kreatywny
あなたの答えは間違っているか、私はあなたを忘れてしまった。 imageにeventListenerを追加すると、それはまだrowに追加されたリスナーによってオーバーライドされます。 – kreatywny
tableViewは、TitaniumのほとんどのeventListenersの例外です。通常、オブジェクトに直接リスナーを追加する必要があります。 –