void CATableView::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) { CAScrollView::ccTouchEnded(pTouch, pEvent); if (m_pHighlightedTableCells) { this->stopActionByTag(0xffff); CATableViewCell* deselectedCell = NULL; CATableViewCell* selectedCell = m_pHighlightedTableCells; m_pHighlightedTableCells = NULL; if (m_pSelectedTableCells.count(selectedCell) > 0 && m_bAllowsMultipleSelection) { deselectedCell = selectedCell; selectedCell = NULL; m_pSelectedTableCells.erase(deselectedCell); } else { if (m_pSelectedTableCells.size() > 0 && m_bAllowsMultipleSelection == false) { deselectedCell = *m_pSelectedTableCells.begin(); m_pSelectedTableCells.clear(); } m_pSelectedTableCells.insert(selectedCell); } if (deselectedCell) { deselectedCell->setControlStateNormal(); if (m_pTableViewDelegate) { m_pTableViewDelegate->tableViewDidDeselectRowAtIndexPath(this, deselectedCell->getSection(), deselectedCell->getRow()); } } if (selectedCell) { selectedCell->setControlStateSelected(); if (m_pTableViewDelegate) { m_pTableViewDelegate->tableViewDidSelectRowAtIndexPath(this, selectedCell->getSection(), selectedCell->getRow()); } } } if (m_pTableViewDelegate) { if (m_pTablePullDownView && m_pContainer->getFrame().origin.y > m_nTablePullViewHeight) { m_pTableViewDelegate->tableViewDidShowPullDownView(this); } if (m_pTablePullUpView && this->getBounds().size.height - (m_pContainer->getFrame().origin.y + m_pContainer->getFrame().size.height) > m_nTablePullViewHeight) { m_pTableViewDelegate->tableViewDidShowPullUpView(this); } } }
void CATableView::loadTableCell() { CCRect rect = this->getBounds(); rect.origin = getContentOffset(); rect.origin.y -= rect.size.height * 0.1f; rect.size.height *= 1.2f; for (unsigned int i=0; i<(unsigned int)m_rTableCellRectss.size(); i++) { for (unsigned int j=0; j<(unsigned int)m_rTableCellRectss.at(i).size(); j++) { CAIndexPath2E indexPath = CAIndexPath2E(i, j); CC_CONTINUE_IF(m_pUsedTableCells.count(indexPath) && m_pUsedTableCells[indexPath]); CCRect cellRect = m_rTableCellRectss[i][j]; CC_CONTINUE_IF(!rect.intersectsRect(cellRect)); CATableViewCell* cell = m_pTableViewDataSource->tableCellAtIndex(this, m_rTableCellRectss[i][j].size, i, j); CC_CONTINUE_IF(cell == NULL); cell->m_nSection = i; cell->m_nRow = j; cell->updateDisplayedAlpha(this->getAlpha()); m_pContainer->addSubview(cell); cell->setFrame(m_rTableCellRectss[i][j]); m_pUsedTableCells[indexPath] = cell; if (m_pSelectedTableCells.count(indexPath)) { cell->setControlStateSelected(); } CAView* view = this->dequeueReusableLine(); CCRect lineRect = m_rLineRectss[i][j]; if (view == NULL) { view = CAView::createWithFrame(lineRect, m_obSeparatorColor); } m_pUsedLines[indexPath] = view; this->insertSubview(view, 1); view->setFrame(lineRect); } } }