在两个视图之间进行通信的更好方法是什么?
Which is the better way to communicate between two views?
我们的一个项目需要一个简单的自定义键盘控件,它将在整个项目的许多视图以及可能的未来项目中重复使用。
有人提出问题:
如果我们知道键盘控件的唯一目的是为用户提供一种输入数据的方式来修改单个 UITextField 或 UILabel 是不是:
a) 最好将对该 UITextField 的引用传递给 CustomKeyboardView,并让该视图处理其 class 或:
内文本字段文本的修改
b) 编写一个委托以从 CustomKeyboardView 返回值并使父级 viewController 处理从键盘接收回调并设置 UITextField 的正确值或:
c) 使用其他模式吗?
值得注意的是,将文本写入文本字段的代码比简单地传递原始字符要复杂一些,它比较文本字段中已有的值并根据该状态传递字符。
如果您有两个密切相关的视图,您需要的是一个位于它们之间的控制器。这很可能是一个 UIViewController
拥有键盘,并且你在创建它时递交 UITextField
或 UILabel
。
然后您的 "main" 视图控制器可以创建这个自定义的子视图,就像您使用 UIPopoverController
或 UIAlertController
.
一样
这种模式使得整个包非常可重用,而无需将控制器逻辑注入视图。
继续我上面的评论,最简单的方法是使用带有自定义视图的文本字段作为输入视图。
您可以轻松地将 UILabel 替换为 UITextFields。
对于 UIButton,将按钮与 UITextField 重叠。当文本字段禁用用户交互时,它将把所有触摸传递给按钮(实现正常的按钮行为),启用后,将是一个普通的可编辑文本字段,允许您将自定义视图用作 'inputView'.
如果您只有一个或两个按钮,则可以对每个按钮执行相同的操作,但如果您有多个按钮,则可以制作一个单独的控件并在整个应用程序中重复使用。
这让您可以
1. 使用健壮的默认 iOS 文本字段委托基础结构
2. 如果您愿意,在编辑时继续使用所有文本字段好东西,例如占位符文本和清除按钮等。
你可以avoid inputView animation easily。如果没有动画,自定义视图与作为父视图的一部分一样好,如果您使视图中的文本字段第一响应者将出现。
我们的一个项目需要一个简单的自定义键盘控件,它将在整个项目的许多视图以及可能的未来项目中重复使用。
有人提出问题:
如果我们知道键盘控件的唯一目的是为用户提供一种输入数据的方式来修改单个 UITextField 或 UILabel 是不是:
a) 最好将对该 UITextField 的引用传递给 CustomKeyboardView,并让该视图处理其 class 或:
内文本字段文本的修改b) 编写一个委托以从 CustomKeyboardView 返回值并使父级 viewController 处理从键盘接收回调并设置 UITextField 的正确值或:
c) 使用其他模式吗?
值得注意的是,将文本写入文本字段的代码比简单地传递原始字符要复杂一些,它比较文本字段中已有的值并根据该状态传递字符。
如果您有两个密切相关的视图,您需要的是一个位于它们之间的控制器。这很可能是一个 UIViewController
拥有键盘,并且你在创建它时递交 UITextField
或 UILabel
。
然后您的 "main" 视图控制器可以创建这个自定义的子视图,就像您使用 UIPopoverController
或 UIAlertController
.
这种模式使得整个包非常可重用,而无需将控制器逻辑注入视图。
继续我上面的评论,最简单的方法是使用带有自定义视图的文本字段作为输入视图。
您可以轻松地将 UILabel 替换为 UITextFields。
对于 UIButton,将按钮与 UITextField 重叠。当文本字段禁用用户交互时,它将把所有触摸传递给按钮(实现正常的按钮行为),启用后,将是一个普通的可编辑文本字段,允许您将自定义视图用作 'inputView'.
如果您只有一个或两个按钮,则可以对每个按钮执行相同的操作,但如果您有多个按钮,则可以制作一个单独的控件并在整个应用程序中重复使用。
这让您可以 1. 使用健壮的默认 iOS 文本字段委托基础结构 2. 如果您愿意,在编辑时继续使用所有文本字段好东西,例如占位符文本和清除按钮等。
你可以avoid inputView animation easily。如果没有动画,自定义视图与作为父视图的一部分一样好,如果您使视图中的文本字段第一响应者将出现。