cocos2dx tableview添加button必現的bug


  我所在的項目中,在tableview中的cell中添加button,發現當button超過tableview的可見范圍時,點擊button仍然會觸發觸摸事件。

想了下,tableview、cell與button是有父子關系的,出現這種情況可能是他們的關系在做范圍判斷時斷掉。

  於是挖挖挖,在UIWidget.cpp的isClippingParentContainsPoint(const Vec2 &pt)函數中發現問題,先貼代碼:

_affectByClipping = false;
Widget* parent = getWidgetParent();
Widget* clippingParent = nullptr;
while (parent)
{
  Layout* layoutParent = dynamic_cast<Layout*>(parent);
  if (layoutParent)
  {
    if (layoutParent->isClippingEnabled())
    {
      _affectByClipping = true;
      clippingParent = layoutParent;
      break;
    }
  }
  parent = parent->getWidgetParent();
}

  這個函數是判斷是否在父控件范圍內的函數,然而,在parent = getWidgetParent();中,是通過強制轉換成Widget類型來拿到parent的,

而button的parent是tableviewcell,tableviewcell繼承自node類,而Widget類是node的子類,相當於做了一次父類轉子類的強制轉換,這當然

是不可以,所以到了這一層就斷了,從而判斷不到button是否在tableview的范圍內。

  那怎么辦呢,很簡單,把getWidgetParent()換成getParent()就可以了。

  把Widget* parent = getWidgetParent();換成Node* parent = getParent();

  parent = parent->getWidgetParent();換成parent = parent->getParent();

  目的達成。

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM