PXListView 0.0.1

PXListView 0.0.1

测试已测试
语言语言 Obj-CObjective C
许可 BSD 3.0
发布最后发布2014年12月

未声明的用户 维护。



  • Alex Rozanski

适用于 Mac OS X 10.5 及以上版本的优化列表视图控制。这是我写完这篇文章后创建的。

PXListView 采用新 BSD 许可证。

PXListView 与 iPhone 的 UITableView 类似,通过入队和出队用于显示行的 NSView 来进行优化,以便在列表中有大量行时保持低内存占用,同时仍允许每个行由一个 NSView 来表示,这比处理单元格更容易。

该控制器的架构基于Tweetie (Mac) 和 Echofon (Mac) 中存在的列表视图控制器。

该项目仍然是非常正在进行中的工作,因此目前尚无文档。

控制器的运作方式

列表视图中的每一行都使用一个 PXListViewCell 实例(这是一个 NSView 的子类)来显示。为了控件能够正常工作,PXListView 的代理响应当前三个消息

  1. numberOfCellsInListView
  2. -listView:cellForRow
  3. -listView:heightOfRow

在 Interface Builder 中设置列表视图

在 Interface Builder 中设置 PXListView 可以通过以下几个简单的步骤完成

  1. NSScrollView 拖动到您想要放置列表视图的位置。
  2. 在身份验证检查器中将 NSScrollView 的类设置为 PXListView
  3. NSScrollView 的文档视图类设置为 PXListViewDocumentView
  4. 选择滚动视图的文档视图后,修改大小遮罩以便仅选择底部和左侧锚点。

使用 PXListViewCell

PXListViewCell 是一个抽象超类,实现了诸如单元格选择之类的最小功能,并声明了列表视图所依赖的方法。

使用列表视图时,您应该创建一个具体的PXListViewCell子类。在这个子类中,可以重写drawRect:方法来进行自定义绘制,并可以在该子类上声明单元格UI输出或数据的属性。项目示例(作为仓库的一部分)显示了这一点。由于PXListViewCell是视图,所以使用NIB设计单元格模板变得非常容易,也使得添加文本字段、按钮、图像等过程变得更简单。

返回单元格

在响应-listView:cellForRow:时,代理应首先在列表视图中调用-dequeueCellWithReusableIdentifier:,传入可重用单元格标识符,以检查是否有可重用单元格可用。如果这返回nil,则可以使用声明在PXListViewCell上的初始化方法initWithReusableIdentifier:创建新的单元格。这通过重用已滚动出屏幕、从视图层次结构中删除并缓存的单元格,尽可能降低控制台的内存占用。

您也可以通过使用PXListViewCell的类方法+cellLoadedFromNibNamed:reusableIdentifier:轻松地从NIB中加载单元格。此方法加载传入名称的NIB,并返回找到的第一个列表视图单元格。要创建与此功能兼容的NIB,只需创建一个空白NIB并添加一个视图。确保将其类设置为您的PXListViewCell子类名称,布局单元格,然后保存。当您使用您的NIB名称调用+cellLoadedFromNibNamed:reusableIdentifier:时,新的单元格将自动释放并返回,然后可以从-listView:cellForRow:返回。无需为新的NIB设置文件所有者。

实时调整大小

PXListView有一个属性usesLiveResize,用于确定是否在调整大小时连续更新控制台。默认情况下,单元格将在控制台调整大小时连续更新。尽管这从视觉上更可取,尤其是在处理大数据集时,但这可能导致UI变得缓慢,因此可以通过将该属性设置为NO来关闭此功能。

优化

PXListView仅保留视图层次结构中列表视图单元格的最小量以实现性能,并在滚动显示屏上的行时向视图层次结构中添加新单元格以显示行,当行滚动出屏幕时,相关的单元格将从视图层次结构中删除。

归属

感谢Mike Abdullah对单元格脱队相关的优化。

感谢Uli Kusterer为PXListView添加和修复功能,包括惯性滚动、键盘导航、变量行高(使用CGFloats)、无障碍功能以及拖放支持。

感谢Tom修复了加载数据时的内存问题。

许可证

PXListView在以下条件下授权(改编自OSIhttp://www.opensource.org/licenses/bsd-license.php

版权所有 © 2011, Alex Rozanski。保留所有权利。

在以下条件得到满足的情况下,允许以源代码形式和二进制形式重新分发和使用,无论是否修改:

  • 源代码重新分发必须保留上述版权声明、本条件列表和以下免责声明。
  • 二进制形式的重新分发必须在不修改的情况下,在文档和其他与分发一起提供的材料中复制上述版权声明、本条件列表和以下免责声明。
  • 作者的姓名或其贡献者的姓名不得用于推广或宣传由此软件派生出来的产品,除非事先获得具体的书面许可。

本软件由版权所有者和贡献者“按原样”提供,任何明示或暗示的保证,包括但不限于适销性和适用于特定目的的保证,均予以拒绝。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、示范性的或后果性的损害(包括但不限于替代货物或服务的采购;使用、数据或利润的丧失;或业务中断)承担责任,无论该损害是由任何原因引起,无论在合同、严格责任还是在侵权(包括疏忽或不作为)的法律理论下。