關於CCTableView中reloadData()操作,刪除第一個/最後一個cell後tableview位置未重新整理的問題
阿新 • • 發佈:2019-01-28
在這裡使用table的cell個數和點選cell的位置idx來進行判斷
假設一個介面可以顯示10個cell.
執行重新整理操作程式碼如下:
這樣可以實現操作TableView後,TableView不會出現空白, 且偏移位置正確; 請大家指正
//介面最多cell #define TABLE_CELL_COUNT 10 TableView* pTable; //初始化 void init(); { setDataSource(this); setDirection(cocos2d::extension::ScrollView::Direction::VERTICAL); setAnchorPoint(Vec2::ANCHOR_MIDDLE); setPosition(Vec2(0, 0)); setDelegate(this); setVerticalFillOrder(TableView::VerticalFillOrder::TOP_DOWN); setSwallowsTouches(false); reloadData(); } //重新整理函式 void reload() { //重新整理資料 pTable->reloadData(); //獲取當前偏移量 Vec2 pos1 = pTable->getContentOffset(); //獲取觸控點選tablecell的Idx,相信這個不用仔細說了 int nTouchCellIdx = pTable->getTouchCellIdx(); //計算偏移量 if (nTouchCellIdx > TABLE_CELL_COUNT) { //這個函式自己寫,獲取單元格數量 int nAllCellCount = getAllCellCount(); if (nAllCellCount <= 0) { return; } //判斷點選單元格和總單元格的數量範圍,防止越界; //這裡是我自定義的巨集,可以自己寫,就是比較nTouchCellIdx 和最大值 _cellCount的大小關係,如果超過了,nTouchCellIdx = _cellCount; JUDGE_VAL_RANGES_MAX(nTouchCellIdx, _cellCount); //計算偏移量 float _offPosY = pos1.y * ((float)nTouchCellIdx / _cellCount); _offPosY = abs(_offPosY); pos1.y += _offPosY; } //重新設定偏移量 pTable->setContentOffset(pos1); }
這樣可以實現操作TableView後,TableView不會出現空白, 且偏移位置正確; 請大家指正