0

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 대신 행이며 경고는 '행'을 반환하고 함수는 호출되지 않습니다.

답변

0

이유는 부모 컨테이너의 'touchEnabled'속성이 false로 설정되어있었습니다. 그렇다면 아이들은 사건을 일으키지 않을 것입니다. 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); 
1

버그는 실제로 Android에 있습니다. iOS가 예상대로 작동합니다. 이미지에는 이벤트 리스너가 없으므로 소스가 아니어야합니다. 이벤트는 청취자가 연결되어 있으므로 TableView까지 버블 링됩니다.

문제를 해결하려면 모든 행의 이미지에 eventListener를 추가해야합니다.

+0

우리는 리스너를 직접 소스에 연결해야한다고 생각한다면 우리는 tableViewRow 출처로. 이 접근법은 문서화가 더 좋고 덜 까다로운 경우 (모든 행에 하나가 아닌 하나의 수신기) 지원됩니다. 내가 말한대로 코드를 변경하려고 생각했지만 사용자가 클릭 할 수있는 행이 2 개 있습니다. 내가 80 개 이상의 행을 가지고 있다면 나는 160 개의 리스너를 가지고있다. 그것은 잘 보이지 않습니다 ... – kreatywny

+0

불행히도 당신의 대답은 잘못되었거나 당신을 오해했습니다. eventListener를 이미지에 추가하면 row에 추가 된 리스너에 의해 여전히 대체됩니다. – kreatywny

+0

tableView는 Titanium에서 대부분의 eventListeners에 대한 예외입니다. 일반적으로 리스너를 객체에 직접 추가해야합니다. –

관련 문제