代码之家  ›  专栏  ›  技术社区  ›  Jakub Niścior

两种观点之间的沟通,哪种方式更好?

  •  0
  • Jakub Niścior  · 技术社区  · 10 年前

    我们的一个项目需要一个简单的自定义键盘控件,该控件将在整个项目的许多视图中重用,也可能在将来的项目中重用。

    有人提出了一个问题:

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

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

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

    c) 是否使用其他模式?

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

    2 回复  |  直到 10 年前
        1
  •  1
  •   Rob Napier    10 年前

    如果你有两个密切相关的观点,你想要的是一个介于两者之间的控制器。这很可能是一个 UIViewController 拥有键盘的人 UITextField UILabel 当您创建它时。

    然后,您的“主”视图控制器可以作为子视图创建此自定义视图,就像您使用 UIPopoverController UIAlertController .

    这种模式使整个包非常可重用,而无需向视图中注入控制器逻辑。

        2
  •  0
  •   Community CDub    7 年前

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

    您可以轻松地用UITextFields替换UILabels。

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

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

    这允许您 1.使用强大的默认iOS文本字段委派基础结构 2.如果你愿意,在编辑时继续使用所有文本字段的好东西,如占位符文本和清除按钮等。

    你可以 avoid inputView animation easily 。如果没有动画,自定义视图就像是父视图的一部分一样好,如果您使文本字段成为视图中的第一个响应者。