ios - 创建类似于 UITableViewCell 的可重用 UIView

标签 ios uiview

哎呀!

我正在尝试创建一个可重复使用的 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/

相关文章:

ios - Swift - 以编程方式在 UIView 中定位项目

ios - 不使用renderInContext捕获UIView :

iphone - 将 UIview 转换为 UIimage 导致内存泄漏

ios - 如何编写 XCUI 测试是否导航到正确的屏幕?

ios - 将字符串转换为带有货币的 double 值

ios - 写 CBCharacteristic 的问题

iphone - 使用 Parse 发布 Facebook Timeline 的链接

ios - 如何在 ios 中的键盘顶部添加行?

ios - 有没有人看到,警告: target specifies SWIFT_VERSION = '2.3'

ios - 解雇ModalViewControllerAnimated时显示正确的UIView :completion: is called