哪个是两个视图之间进行通信的更好方法?

时间:2015-03-30 13:14:45

标签: ios design-patterns

我们的一个项目需要一个简单的自定义键盘控制,可以在整个项目中重复使用许多视图以及可能的未来项目。

提出了一个问题:

如果我们知道键盘控件的唯一目的是为用户提供一种输入数据的方法来修改单个UITextField或UILabel就是:

a)最好将对该UITextField的引用传递给CustomKeyboardView,并让该视图处理对其类别中文本字段文本的修改,或者:

b)编写一个委托,用于从CustomKeyboardView返回值,并使父viewController句柄从键盘接收回调并设置UITextField的正确值或:

c)使用其他一些模式吗?

值得注意的是,将文本写入文本字段的代码比简单地传递原始字符更复杂,它会比较文本字段中已有的值并根据该状态传递字符。

2 个答案:

答案 0 :(得分:1)

如果你有两个密切相关的视图,你想要的是一个控制器,它们之间存在。这可能是拥有键盘的UIViewController,并且您在创建键盘时提出UITextFieldUILabel

你的"主要"然后,视图控制器可以在孩提时间创建此自定义视频,就像您可能使用UIPopoverControllerUIAlertController一样。

此模式使整个包非常可重用,而不会将控制器逻辑注入视图中。

答案 1 :(得分:0)

继续上面的评论,最简单的方法是使用自定义视图的文本字段作为输入视图。

您可以使用UITextField轻松替换UILabel。

对于UIButtons,重叠按钮带有UITextField。当文本字段禁用用户交互时,它会将所有触摸传递给按钮(执行正常的按钮行为),并且在启用时,将是一个正常的可编辑文本字段,允许您将自定义视图用作“inputView”。

如果您只有一个或两个按钮,则可以对每个按钮执行相同操作,但如果您有许多按钮,则可以单独控制并在整个应用程序中重复使用。

这可以让你 1.使用健壮的默认iOS文本字段委托基础结构 2.如果您愿意,可以在编辑等时继续使用占位符文本和清除按钮等所有文本域名。

你可以avoid inputView animation easily。如果没有动画,如果您在视图中显示文本字段第一个响应者,则自定义视图与父视图的一部分一样好。