该视频中使用的设计模式是什么?

What is the design pattern being used in this video?

我最近看了 this video 教程关于如何创建自定义 UIPickerView,我在我的项目中成功实现了 UIPickerView。但是,我想对出现在我的应用程序中的 UIPickerView 进行一些更改。

对于初学者,视频中概述的自定义 UIPickerView 是 subclassing 的示例吗?

其次,是否可以修改自定义 UIPickerView 的实例,使其具有不同于 Done 的文本标签?如果是这样,我是否必须修改 KCModalPicker.h/m 文件?

因此我想到了第三个问题,如果我修改 KCModalPicker.h/m 文件,那么我项目中 class 的每个其他实例都会继承更改,那么有什么方法可以保持基本 class 不变,但能够向 class 添加自定义,因此像 UIPickerView 有多少列之类的东西取决于被证实的实例,而不依赖于 KCModalPicker.h/m 个文件?

更新 我所指的 ModalPicker class 的源代码可以在这里找到,

https://github.com/subdigital/nsscreencast/tree/master/025-custom-picker-component-part-1

我不想看视频来回答你的问题,并且怀疑其他人也有同感。 (我讨厌看开发视频,因为它们又长又乏味。我不需要有人详细解释如何做某事。让我跳到我感兴趣的部分。)你应该描述的方案是用于我们可以回答您的相关问题。

如果该视频描述了一个 class KCModalPicker,它可能是子class UIPickerView,或者它可能包含一个选择器视图(这将是一个“有”关系,而不是“是” -a" 关系。KCModalPicker 可能是一个模态视图控制器,里面有一个 选择器视图。)

如果您想修改一个 class,例如 KCModalPicker,但又不想更改所有实例,那么是的,subclassing 可能是一个不错的选择。创建一个名为 MyModalPicker 的子class,它继承自 KCModalPicker 并根据需要更改行为。

编辑:

查看 Github 上的文件后,该项目似乎有一个 class BSModalPickerView,它是 UIView 的子class,并且包含一个 UIPickerView。如上所述,这是一种“has-a”关系。 BSModalPickerView class 内部有一个它管理的选择器视图。所以不,这个项目似乎没有使用 subclassing.

演示程序有一个视图控制器,它使用 BSModalPickerView 方法 presentInView:withBlock: 将选择器显示为视图控制器主视图的子视图。

看起来还有一种方法presentInWindowWithBlock:可以直接在window中显示选择器视图。

如果您想修改某些 BSModalPickerView 的行为而让其他的保持不变,创建您自己的 BSModalPickerView 的自定义子class 将是一种合理的方法。您还可以修改根 BSModalPickerView 以获得更多设置选项(您在 init 方法中传递的额外属性或参数)。

顺便说一句,您的问题是关于 KCModalPicker.h,但是我在您发布的 github link 中看到的 class 是 BSModalPickerView。不确定差异是什么。