创建一个类似于UITableViewCell的可重用UIView
嗨!
我试图创建一个可重复使用的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;
}
从这里,值得注意的是,该单元格从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;
}
我在考虑在我的TestScrollView中添加一个NSMutableDictionary来存储cellIdentifier和TestScrollViewCell(UIView),然后根据字典键将它们拔出来将是一个好的开始,但这真的是一个真正的“可重用”单元实现吗?
我可以看到的问题是,我会将UIView添加到基于框架定位的ScrollView。 在这种意义上离开视图不会允许我在不影响第一个视图的情况下(通过修改框架)将视图添加到滚动视图中,但当然这是UITableViewCells的工作原理以及节头/页脚?
我一直在寻找这个实现,它似乎遵循了我打算实现的相同的路线,但我并没有100%的销售,这是可重用细胞的真正实现。
以前有没有人有过这样的运气? 我试图让苹果公司在这一块上领先,但除了UITableViewCell和MKAnnotationView(MapKit)以外,没有任何这种可访问的实现供我从中收集。
任何帮助将不胜感激。
这不仅仅是视图,它是你需要重新创建的整个UITableViewController。 重用流程如下: dequeueReusableCell
从NSMutableArray(从数组中获取第一个对象,然后将其从数组中删除并返回)从某些存储中获取空的重用单元格。 如果数组为空,则方法返回nil。 你检查单元格的值,如果它是零,你创建一个新的单元格类的实例。 如果不是零,则填写您的数据。 这适用于每个可见单元格,即每个可以放在屏幕上的单元格。 任何不可见的单元格都未初始化。 当用户滚动表格时,完全离开屏幕的单元格(不是单个像素可见)发送到reuseQueue--所有子视图和值都返回到默认值或仅仅被删除,然后单元格被添加到我们的NSMutableArray的末尾是队列。 我希望我解释得很好。 编辑:哦,还有一件事 - 你将需要不同的重用队列为每个重用标识符。