SkySeraph July. 30th 2016html
Email:skyseraph00@163.comios
更多精彩請直接訪問SkySeraph我的站點:www.skyseraph.com swift
Recently in my new project I need to select all the cell data in my UITabViewCell and UICollectionViewCell, and need to do some operations with all the cells(like delete etc.), What I do as follows:app
UITabViewide
private func selectAll(select: Bool) { let numSections = mListTableView?.numberOfSections if let numSections = numSections { for numSection in 0 ..< numSections{ let numItems = mListTableView?.numberOfRowsInSection(numSection) if let numItems = numItems { for numItem in 0 ..< numItems { selectCell(NSIndexPath(forRow: numItem, inSection: numSection), select: select) } } } } } private func selectCell(indexPath : NSIndexPath, select: Bool) { if mListTableView?.cellForRowAtIndexPath(indexPath) != nil { let cell = mListTableView?.cellForRowAtIndexPath(indexPath) as! DownloadListViewCell //cell.setSelected(select, animated: true) cell.setSelectForDelete(select) // select status UI in UITabViewCell mDownloadList[indexPath.row].selectToDelete = select // Pojo data } }
UICollectionViewui
private func selectAll(select: Bool) { let numSections = mMyOfflineCollectView?.numberOfSections() if let numSections = numSections { for numSection in 0 ..< numSections{ let numItems = mMyOfflineCollectView?.numberOfItemsInSection(numSection) if let numItems = numItems { for numItem in 0 ..< numItems { selectCell(NSIndexPath(forRow: numItem, inSection: numSection), flag: select) } } } } } private func selectCell(indexPath : NSIndexPath, flag: Bool) { if mMyOfflineCollectView.cellForItemAtIndexPath(indexPath) != nil { let cell = mMyOfflineCollectView.cellForItemAtIndexPath(indexPath) as! MyOfflineCollectionViewCell cell.setSelect(flag) if flag { mMyOfflineCollectView.selectItemAtIndexPath(indexPath, animated: true, scrollPosition: UICollectionViewScrollPosition.None) }else { mMyOfflineCollectView.deselectItemAtIndexPath(indexPath, animated: true) } mMyofflinesData[indexPath.row].needDelete = flag } }
But, The problem is , I can only select the visible cell when I scoll down or up, or do operations spa
UICollectionView cellForItemAtIndexPath is nilcode
cellForItemAtIndexPath returns nil after force scrolling to make it visiblehtm
Select all the cells in UITableViewblog
Easier way to select all rows in UITableView
tableView.cellForRowAtIndexPath returns nil with too many cells (swift)
tableView.cellForRowAtIndexPath(indexPath) return nil
The real problem happened at the cellForRowAtIndexPath / cellForItemAtIndexPath, Which defined in Apple as follows:
public func cellForRowAtIndexPath(indexPath: NSIndexPath) -> UITableViewCell? // returns nil if cell is **not visible** or index path is out of range
public func cellForItemAtIndexPath(indexPath: NSIndexPath) -> UICollectionViewCell?
When the cell is not visible, the cellForRowAtIndexPath will return nil,
So, it’s not the right way to do the cell select operation out the
UITableViewDataSource in cellForRowAtIndexPath (UITabView), you should do it separate. The right way as follows:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier(DOWNLOAD_LIST_CELL_INDENTIFIER, forIndexPath: indexPath) as! DownloadListViewCell cell.selectionStyle = UITableViewCellSelectionStyle.None // ... cell.setSelectForDelete(self.mDownloadList[indexPath.row].selectToDelete)// select status UI in UITabViewCell // ... return cell } private func selectCell(indexPath : NSIndexPath, select: Bool) { mDownloadList[indexPath.row].selectToDelete = select // Pojo data mListTableView?.reloadData() // reloadData }
========
By SkySeraph-2016 www.skyseraph.com