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;
}
};
안드로이드에서 완벽하게 작동합니다. imageView를 클릭하면 imageView는 이벤트의 소스입니다 (경고는 'delete'를 반환하고 'deleteShopping'함수가 호출됩니다).
iOS에서 소스는 항상 ImageView 대신 행이며 경고는 '행'을 반환하고 함수는 호출되지 않습니다.
우리는 리스너를 직접 소스에 연결해야한다고 생각한다면 우리는 tableViewRow 출처로. 이 접근법은 문서화가 더 좋고 덜 까다로운 경우 (모든 행에 하나가 아닌 하나의 수신기) 지원됩니다. 내가 말한대로 코드를 변경하려고 생각했지만 사용자가 클릭 할 수있는 행이 2 개 있습니다. 내가 80 개 이상의 행을 가지고 있다면 나는 160 개의 리스너를 가지고있다. 그것은 잘 보이지 않습니다 ... – kreatywny
불행히도 당신의 대답은 잘못되었거나 당신을 오해했습니다. eventListener를 이미지에 추가하면 row에 추가 된 리스너에 의해 여전히 대체됩니다. – kreatywny
tableView는 Titanium에서 대부분의 eventListeners에 대한 예외입니다. 일반적으로 리스너를 객체에 직접 추가해야합니다. –