Pri*_*wal 4 objective-c uikit ios uicollectionview uicollectionreusableview
我一直想知道为什么我的代码在获取集合视图单元格时运行良好cellForItemAtIndexPath:,dequeueReusableCellWithReuseIdentifier:而不是在运行时.
这是我的代码:
这个很好用:
NSInteger numberOfCells = [self.collectionView numberOfItemsInSection:0];
for (NSInteger i = 0; i < numberOfCells; i++) {
myCustomCollectionCell *cell = (myCustomCollectionCell *)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:i inSection:0]];
//here I use the cell..
}
Run Code Online (Sandbox Code Playgroud)
虽然编译得很好但不起作用(我没有描述我在单元格上执行的更改)
NSInteger numberOfCells = [self.collectionView numberOfItemsInSection:0];
for (NSInteger i = 0; i < numberOfCells; i++) {
myCustomCollectionCell *cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"myCell"forIndexPath:[NSIndexPath indexPathForItem:i inSection:0]];
//here I use the cell..
}
Run Code Online (Sandbox Code Playgroud)
试过这个,但没有用:
NSInteger numberOfCells = [self.collectionView numberOfItemsInSection:0];
for (NSInteger i = 0; i < numberOfCells; i++) {
myCustomCollectionCell *cell = (myCustomCollectionCell *)[self.collectionView dequeueReusableCellWithReuseIdentifier:@"myCell"forIndexPath:[NSIndexPath indexPathForItem:i inSection:0]];
//here I use the cell..
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
这两个基本上是两种截然不同的方法.
dequeReusableCellWithReuseIdentifier:假设您有要查看的文章列表.假设你有50篇文章.屏幕不会同时在屏幕上显示所有50篇文章.它将根据您给行的高度一次显示有限的单元格.让我们说屏幕一次只显示5篇文章,现在你位于列表的顶部.该列表将显示1-5项.现在滚动时,为了显示第6个项目,列表会重新使用第1个单元格,将其配置为第6个单元格并显示它.到这时你的第一个细胞已不在视野范围内了.2 .:cellForRowAtIndexPath另一方面,cellForRowAtIndexPath返回已在视图中的单元格或您提供的IndexPath.在这种情况下,如果单元格已经在内存中,它将返回该单元格,或者它将配置一个新单元格并返回.
下面的示例适用于UITableViews,但UICollectionViews可以以相同的方式处理.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
/*
* This is an important bit, it asks the table view if it has any available cells
* already created which it is not using (if they are offscreen), so that it can
* reuse them (saving the time of alloc/init/load from xib a new cell ).
* The identifier is there to differentiate between different types of cells
* (you can display different types of cells in the same table view)
*/
UITableViewCell *cell = [tableView dequeueReusableCellWithReuseIdentifier:@"MyIdentifier"];
/*
* If the cell is nil it means no cell was available for reuse and that we should
* create a new one.
*/
if (cell == nil) {
/*
* Actually create a new cell (with an identifier so that it can be dequeued).
*/
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MyIdentifier"] autorelease];
}
/*
* Now that we have a cell we can configure it to display the data corresponding to
* this row/section
*/
//Configure the cell here..
/* Now that the cell is configured we return it to the table view so that it can display it */
return cell;
}
Run Code Online (Sandbox Code Playgroud)
如果您还不清楚,请告诉我.
| 归档时间: |
|
| 查看次数: |
5725 次 |
| 最近记录: |