【发布时间】:2015-06-03 12:39:29
【问题描述】:
我们的一个项目需要一个简单的自定义键盘控件,该控件将在整个项目的许多视图以及未来可能的项目中重复使用。
提出了一个问题:
如果我们知道键盘控件的唯一目的是为用户提供一种输入数据的方式来修改单个 UITextField 或 UILabel:
a) 最好将对该 UITextField 的引用传递给 CustomKeyboardView 并让该视图处理其类中文本字段文本的修改,或者:
b) 编写一个委托以从 CustomKeyboardView 返回值,并使父 viewController 处理从键盘接收回调并设置 UITextField 的正确值或:
c) 使用其他模式吗?
值得注意的是,将文本写入文本字段的代码比简单地传递原始字符要复杂一些,它比较文本字段中已经存在的值并根据该状态传递字符。
【问题讨论】:
-
您是否只是想将自定义键盘指定为 UITextField 的 inputView。我将创建一个 UITextField 的子类,它将您的可重复使用的键盘连接为 inputView。然后在情节提要或代码中,您只需将文本字段创建为子类的实例。
-
@RoryMcKinnel 我们可能还需要使用控件来修改UILabels 和UIButtons。选项 a) 使我们能够传递对要使用键盘修改的控件的引用,如果它是一个允许我们设置其文本的控件 - 我们将其设置为文本。如果它不允许文本更改 - 我们会引发异常。
-
我可以想象一个 UIButton 是必须的场景,但无法想到 UITextField(禁用用户交互,没有边框和清晰的背景颜色)不能替换 UILabel 的任何情况。不要使用标签..而不是使用文本字段..您可以使用自定义视图作为那些键盘..
-
@SwapnilLuktuke 同意,UILabel 可以替换为 UITextField。那么 UIButton 呢,它没有指定我接受的 inputView 呢?还有一个问题,你可以使用 inputView 没有将控件放在屏幕底部的动画吗?该控件是否已经成为 UITextField 也属于的视图的一部分?
-
@Jakub。对于 UILabel,您最好在编辑时将其与 UITextField 交换,然后在完成后将其替换为 UILabel,或者完全使用 UITextField。对于 UIButton,我不确定我是否完全理解用例,除非它是为了实现某种选择器按钮。在这里,我倾向于再次使用与 UIButton 具有相同框架的 UITextField,因此您可以简单地要求它成为 FirstResponder 来编辑标签。如前所述,您只需要求开发人员使用更新后的 UIButton。
标签: ios design-patterns