Mensa 0.9.2

Mensa 0.9.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2014年12月

Jordan Kay 维护。



Mensa 0.9.2

  • Jonathan Wight和Jordan Kay

Mensa:智能表格

展示了现代表格视图和集合视图的三个简单技术。这三个技术从概念上是分开的,但在本演示项目中是组合在一起的;您可以使用每个功能。

通过自动布局计算行高或项目大小

表格或集合视图控制器的数据中介器保留了一个额外的'指标'单元格属性,用于填充和布局单元格以计算高度。

这对于使用Auto Layout的单元格非常有用。您不必再进行笨拙且尴尬的高度计算 - 只需使用自动布局即可免费获得高度计算。

缺点是您的单元格将布局两次,自动布局可能很昂贵。您可以通过缓存第一次布局的结果然后重新使用它来减轻这个问题。但是缓存指标是相当复杂的。当视图可编辑或大小改变、旋转、动态文本大小更改(iOS 7)以及许多其他情况时,都需要丢弃或更新缓存。

在实际情况中,对于典型的表格视图中的视图(例如,复杂的推文视图)来说,这种双重布局不昂贵。

将视图控制器作为单元格原型使用

在表格或集合视图单元格中使用UIViewController实例,并在运行时为特定视图控制器生成单元格类

这对于表格单元格在表格之外不可用非常有用。通过在视图控制器中托管内容,然后在单元格中托管该视图控制器,您可以非常容易地在应用程序的其他部分重复使用该UI。这通常很方便。我们在这里通过在表格视图和集合视图中托管相同的UIViewController类来展示这一点。

该技术将在运行时生成一个MNSHostingTableViewCellMNSHostingCollectionViewCell的子类,它托管一个特定的视图控制器类。这使得您可以根据需要将单元格类注册到表格或集合视图中。这项技术与单元格重用非常兼容。

为支持对象注册视图控制器

为了填充其表格视图或集合视图的内容,MNSTableViewControllerMNSCollectionViewController实例定义了一个包含MNSTableViewSection(包含一个分区标题或页脚)或NSArray实例的sections数组,以及一个介于视图和数据之间的数据调解器。为了显示每个分区中的对象,表格或集合视图控制器注册了一个用于每个模型对象类的MNSHostedViewController子类。视图控制器引用一个视图(或如果需要,多个视图以根据对象的属性自定义显示),其内容根据要显示的模型对象进行更新。

这允许开发者将显示逻辑合并到一个用于显示该对象的视图控制器中,以填充其内容并在表格或集合视图中选择它。更重要的是,它提供了一种简单而强大的方法来在表格或集合视图中显示异构对象的任意列表并处理与它们相关的用户输入。

示例

演示示例显示了这三个技术的实际应用。我们的表格视图控制器子类维护一个要显示在表格视图中的对象数组。它显示值从1到100的MNSNumber实例,并在每个质数下方显示一个MNSPrimeFlag实例。点击一个数字将显示其因子。我们将每个模型对象类注册为使用适当的视图控制器,该控制器的视图将显示其实例并处理选择行为。(注意,这些视图控制器可以在任何地方使用,而不仅仅是我们的表格视图单元格中,但我们利用单元格高度通过视图的布局约束自动计算的优势。)在表格视图控制器中,我们使用自定义逻辑来根据标签字号的增加缩小显示数字的字号。

Screenshot 1 Screenshot 2

我们还使用流布局在集合视图中演示了这项技术,并提供了显示或隐藏每个数字后面质数标志的能力。

Screenshot 3

要求

项目使用Xcode 5(特别是nibs),但这些技术适用于iOS 6及以上版本。