嗨!
我正在尝试创建一个可重用的UIView(出于各种原因),类似于UITableViewController中使用的UITableViewCell实现.我想在UIScrollView中使用可重用的视图,所以我知道我不是想要实现一些完全无法实现的东西.
默认的实现是:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//declare cell identifier
static NSString *cellIdentifier = @"cell_identifier";
//dequeue cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
//check cell is valid
if(cell == nil)
{
//create a new cell
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}
//
//return cell
return cell;
}
Run Code Online (Sandbox Code Playgroud)
从这一点来说,值得注意的是,单元格是从UITableView中出列的.如果单元格无效,则创建新单元格.我的问题是,这个单元如何变为"排队"以便以后再次使用?
我目前尝试的实现如下所示:
- (TestScrollViewCell *)scrollView:(TestScrollView *)_scrollView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//declare cell identifier
static NSString *cellIdentifier = @"cell_identifier";
//dequeue cell
TestScrollViewCell *cell = (TestScrollViewCell *)[scrollView dequeueReusableCellWithIdentifier:cellIdentifier];
//check cell is valid
if(cell == nil)
{
//create a new cell
cell = [[TestScrollViewCell alloc] initWithFrame:CGRectZero];
}
//
//return cell
return cell;
}
Run Code Online (Sandbox Code Playgroud)
我想在我的TestScrollView中添加一个NSMutableDictionary来存储cellIdentifier和TestScrollViewCell(UIView),然后根据字典键将它们拔出来是一个好的开始,但这真的是"可重用"单元的真正实现吗?
我可以看到的问题是,我会将UIView添加到基于框架定位的ScrollView.在这种意义上对视图进行Dequeing将不允许我将视图添加到滚动视图而不影响第一个视图(通过修改框架)但肯定这是UITableViewCells的工作方式,以及节页眉/页脚?
我一直在看这个实现,它似乎遵循我打算实现的相同路线,但我不是100%销售,这是可重用单元的真正实现.
以前有人有运气吗?我试图在这个问题上取得Apple的领先优势,但除了UITableViewCell和MKAnnotationView(MapKit)之外,我没有任何可访问的实现可供我收集.
任何帮助将不胜感激.
这不仅仅是视图,而是您需要重新创建的整个 UITableViewController。重用流程如下:\ndequeueReusableCell从某些存储中获取空的重用单元,我猜是从 NSMutableArray (从数组中获取第一个对象,然后从数组中删除它并返回它)。如果数组为空,则方法返回 nil。您检查单元格值,如果它为零,则创建单元格类的新实例。如果它不为零,则用数据填充它。\n这适用于每个可见单元格,即可以适合屏幕的每个单元格。任何不可见的单元格都不会被初始化。当用户滚动表格时,完全离开屏幕(没有一个像素可见)的单元格被发送到reuseQueue \xe2\x80\x93\xc2\xa0,它们的所有子视图和值都返回到默认值或只是为零,然后单元格得到添加到 NSMutableArray 的末尾,即队列。\n我希望我解释得足够好。\n编辑:哦,还有一件事 - 每个重用标识符都需要不同的重用队列。
| 归档时间: |
|
| 查看次数: |
3368 次 |
| 最近记录: |