子类化 UIView 是处理未知数量的这些自定义对象的正确方法吗?

Posted

技术标签:

【中文标题】子类化 UIView 是处理未知数量的这些自定义对象的正确方法吗?【英文标题】:Is subclassing UIView the right way to go about an unknown number of these custom objects? 【发布时间】:2015-08-10 20:22:46 【问题描述】:

我的应用程序中有一个屏幕,它从我的用户对象中提取一个未知大小的数组,并且必须为数组中的每个项目显示一个对象,该对象由我的背景图像的 UIImageView 和用于激活/停用特定的 UISwitch 组成项目,一个带有项目名称的标签,以及一个与项目名称相对应的标签。

这些都显示在 UIScrollView 中,因为几乎总是会有比屏幕显示更多的项目,尤其是在 iPhone 4 上。

我最初快速拼凑了一个由 20 个这样的对象组成的静态屏幕,但发现我经常会超过数组中的项目数,需要转换为动态解决方案。

我还没有使用子类化,并且想在我深入实现之前确定这是正确的解决方案。向我的 scrollView 添加一个子类听起来比单独添加每个组件并计算出各种屏幕的间距要干净得多。

如果这是正确的解决方案,您是否可以向我指出任何资源来了解如何正确执行此子类化?即,如何为可以添加标签内容和开关状态的对象添加构造函数,并以编程方式添加约束。我只使用了情节提要中的约束。

如果您认为子类化 UIView 不是实现此目的的正确方法,您会建议什么其他解决方案?毫无疑问,我是 ios 开发的新手,因此我很抱歉这篇文章寻求从哪里开始的建议,而不是帮助修复实现的特定部分。

【问题讨论】:

【参考方案1】:

您应该为此使用UITableViewUICollectionView,并继承 UITableViewCell 或 UICollectionViewCell 来创建您的自定义视图层次结构。 UITableViewUICollectionView 将处理单元的重用,这将有助于内存管理。

更新: 因为您想使用UITableView,所以要在单元格之间添加间距,将节数设置为元素数,然后为节添加标题并设置其高度,您可以通过实现UITableViewDelegates 来做到这一点,请访问以下链接以获取有关UITableView 的详细信息和UITableViewDelegates https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDelegate_Protocol/

【讨论】:

UITableView 是否允许使用我的自定义背景图像和单元格之间的间距?我在整个应用程序的其他地方使用相同的背景图像,所以我希望设计保持一致。 UITableView和UICollectionView的用例有什么区别? 找到了这个线程,看来 UITableView 符合我的需要,因为我需要一个 1 列列表而不是网格。我仍然有兴趣知道我是否可以使用 UITableView 创建我正在寻找的美学。如果我的所有单元格都将在彼此之上,即背景图像相互接触,这将不适合我的用例。 ***.com/questions/23078847/… 在视图控制器的视图中添加imageView,然后点击它添加UITableView,将其背景颜色设置为清除。是的,您也可以添加间距。 UITableView 是垂直堆栈,而 UICollectionView 可以是垂直、水平甚至自定义布局。 我想我不清楚。背景图像适用于我的每个单元格,而不是整个视图。我的最后一个问题,我将准备好将您标记为正确并深入研究 UITableView 实现,如果表格视图的大小不适合我的 UIViewController 的视图,它是否也可以充当滚动视图?还是我还需要使用我的 UIScrollView? 我更新了关于在单元格之间添加间距的答案

以上是关于子类化 UIView 是处理未知数量的这些自定义对象的正确方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

子类化自定义 UIView - 如何初始化

子类化 UIView 并显示多个实例

如果 drawRect: 被覆盖,子类化的 UIView 显示黑色背景

iOS:使用 nib 子类化 UITableViewCell,进入 UIView(不是视图控制器)子类

在自定义视图/uiview 子类上实现 iphone 的复制/粘贴控件

像 UIPopoverController 中的方式一样关闭自定义 UIView