哎呀!
我正在尝试创建一个可重复使用的 UIView(出于各种原因),类似于 UITableViewController 中使用的 UITableViewCell 实现。我想在 UIScrollView 中使用可重用 View ,所以我知道我不是在尝试实现完全无法实现的目标。
这个的默认实现是:
- (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;
}
从这里,值得注意的是单元格从 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;
}
我在想,将 NSMutableDictionary 添加到我的 TestScrollView 以存储 cellIdentifier 和 TestScrollViewCell (UIView),然后根据字典键将它们拔出将是一个好的开始,但这真的是“可重用”的真正实现吗“细胞?
我看到的问题是,我会将 UIView 添加到基于框架定位的 ScrollView。从这个意义上来说,出列 View 不允许我在不影响第一个 View (通过修改框架)的情况下将 View 添加到 ScrollView ,但这肯定是 UITableViewCells 以及节页眉/页脚的工作方式?
我一直在看this implementation这似乎遵循了我打算实现的相同路线,但我并不是 100% 相信这是可重复使用单元的真正实现。
有没有人以前有过这样的运气?我正试图在这方面取得 Apple 的领先地位,但除了 UITableViewCell 和 MKAnnotationView (MapKit) 之外,没有任何可访问的实现可供我收集。
如有任何帮助,我们将不胜感激。
最佳答案
您需要重新创建的不仅仅是 View ,还有整个 UITableViewController。重用流程是这样的:
dequeueReusableCell
从一些存储中获取空的重用单元格,我猜是从 NSMutableArray(从数组中获取第一个对象,然后从数组中删除它并返回它)。如果数组为空,则方法返回 nil。您检查单元格值,如果它为零,则创建一个新的单元格类实例。如果它不是零,则用您的数据填充它。
这适用于每个可见单元格,即可以适合屏幕的每个单元格。任何不可见的单元格都不会被初始化。当用户滚动表格时,完全离开屏幕(没有一个像素可见)的单元格被发送到 reuseQueue - 它们的所有 subview 和值都返回到默认值或只是为空,然后单元格被添加到我们的 NSMutableArray 的末尾是队列。
我希望我解释得足够好。
编辑:哦,还有一件事 - 每个重用标识符都需要不同的重用队列。
关于ios - 创建类似于 UITableViewCell 的可重用 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8975051/