UITabView/UICollectionView 全选问题
2016-07-08 08:32
513 查看
更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com
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:
UITabView
UICollectionView
But, The problem is , I can only select the visible cell when I scoll down or up, or do operations
UICollectionView cellForItemAtIndexPath
is nil
cellForItemAtIndexPath
returns nil after force scrolling to make it visible
Select all the cells in UITableView
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:
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:
UITableView
UICollectionView
SYNC
POST
========
By SkySeraph-2016 www.skyseraph.com
The Issue
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:UITabView
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 } }
UICollectionView
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
Solutions in NetWork
UICollectionView cellForItemAtIndexPathis nil
cellForItemAtIndexPath
returns nil after force scrolling to make it visible
Select all the cells in UITableView
Easier way to select all rows in UITableView
tableView.cellForRowAtIndexPath
returns nil with too many cells (swift)
tableView.cellForRowAtIndexPath(indexPath)
return nil
The real Solution
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 }
Ref
UITableViewUICollectionView
SYNC
POST
========
By SkySeraph-2016 www.skyseraph.com
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结
- iOS应用中UISearchDisplayController搜索效果的用法
- iOS App开发中的UISegmentedControl分段组件用法总结
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- iOS中UIAlertView警告框组件的使用教程
- 浅析iOS应用开发中线程间的通信与线程安全问题
- iOS中的UIKeyboard键盘视图使用方法小结
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法