UIKit UITableViewCell 实现

Posted

技术标签:

【中文标题】UIKit UITableViewCell 实现【英文标题】:UIKit UITableViewCell Implementation 【发布时间】:2020-06-05 01:57:11 【问题描述】:

作为我深入了解 UIKit 及其功能如何实现的研究的一部分,我读到在 ios 的早期,UITableView 加载了表格视图,但在他们所做的是现在只加载可见的单元格。 那么dequeueReusableCell(withIdentifier identifier:String)怎么实现呢?

class UITableView: UIScrollView 
    func dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell? 
    

我认为有一个包含可见单元格的数组,并且这些方法只是根据标识符进行过滤。像这样的:

let cell = visibleCells.filter  $0.identifier == identifier 
return cell

但我想知道是否有更好的方法来理解它并做到这一点。

【问题讨论】:

我认为这与您所描述的相反。 dequeueReusableCell 正在查看一组不可见的单元格(即可以空白和重绘),然后返回其中一个并将其拉出该池。见***.com/questions/3552343/… 【参考方案1】:

10 年前创建了一个项目“Chameleon”,其目标是在 macOS 上实现 UIKit。作者做了很多调试/逆向工程来理解和模仿大多数 UIKit 类型。代码可在Github 访问,UITableView 实现为here

- (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier

    for (UITableViewCell *cell in _reusableCells) 
        if ([cell.reuseIdentifier isEqualToString:identifier]) 
            UITableViewCell *strongCell = cell;

            // the above strongCell reference seems totally unnecessary, but without it ARC apparently
            // ends up releasing the cell when it's removed on this line even though we're referencing it
            // later in this method by way of the cell variable. I do not like this.
            [_reusableCells removeObject:cell];

            [strongCell prepareForReuse];
            return strongCell;
        
    

    return nil;

还有一个来自 Microsoft 的 UIKit 逆向工程版本,但使用 c++ https://github.com/Microsoft/WinObjC/tree/master/Frameworks/UIKit

【讨论】:

以上是关于UIKit UITableViewCell 实现的主要内容,如果未能解决你的问题,请参考以下文章

UIKit框架(21)UITableView实现复杂单元格

无法查看 UITableViewCell 中的自定义标签

自定义 UITableViewCell 不调用 prepareForSegue

使用故事板和子类自定义 UITableViewCell

为啥我的自定义 UITableViewcell 没有显示?

更改自定义 UITableViewCell iphone中的文本颜色