ios - Storyboard和 ViewController 工厂

标签 ios uiviewcontroller uistoryboard factory-pattern

我创建了一个 Storyboard来描述我的导航流程应该如何工作,而这正是它应有的方式。

有一次我使用 Collection View 来显示不同级别的列表,您可以在其中选择一个级别。

现在我正在使用 segue 前进到应该处理用户输入的 View Controller 。它由我实现的 2 个 ImageView 和 1 个自定义 View 组成。

但我有 2 种不同的自定义 View ,它们是同一类的抽象版本的子类。他们做类似的事情,大部分时间但在某些时候他们是不同的,所以我想我需要把它们放到单独的类中。

对于一个类,我可以让 Storyboard 膨胀/实例化父类(super class),因为那时它不应该是抽象的。

Custom Classes

这个想法是,当我准备segue时,我可以传递关卡对象, Controller 会自动将匹配的 Controller 绑定(bind)到自定义 View ,这应该可以工作,因为我将抽象类与 View 相关联。

我的问题是,由于 Storyboard 处理 ViewController 的初始化,我不知道在哪里或如何应用 Factory。

我在 Android 中做过类似的事情,但我不完全确定这是 iOS 上最好的方法。

除了我自己在代码中添加 Controller 之外,我正在使用自动布局。我能够计算出当前 View 及其 subview 尺寸的第一点是在 ViewDidAppear 中。但如果我现在开始添加/调整自定义 View 的大小,它看起来很糟糕。如果我将它添加到 Storyboard 中,它从一开始就具有适当的大小,因为我可以对其附加约束,就像我使用 ImageView 所做的那样。

我很感激任何帮助,或暗示正确的方向。

编辑

我相当确定类似 MasterDetail 的实现会起作用,但据我了解,这与我自己处理 View Controller 创建的版本没有任何不同。我希望 View 通过自动布局获得它的大小,这样当它们第一次出现时,它们已经具有合适的大小并且我不需要在已经显示它们之后调整它们的大小。

问题来了,我可以在没有 ViewController 的情况下在 Storyboard 中添加一个 View,然后将 ViewController 附加到代码中的 View 吗?

这是一个坏主意吗?

最佳答案

有几个选项,具体取决于您的 Controller 和 View 类正在做什么:

1.

坚持您的建议,而不是在 Storyboard 中指定特定的 View 子类,而只是在那里添加一个“容器” View (简单的 UIView)。该 View 具有您需要的所有约束。现在,不是将 Controller 绑定(bind)到现有 View ,而是根据关卡内容创建 Controller 和关联 View 。将 View 添加到“容器” View 并简单地将其固定到父 View 边缘。

2.

通过在 Storyboard中指定“抽象”类的名称,这就是您获得的实例类型。从技术上讲,您可以在加载 View 并传输所有约束后替换它。

3.

与其使用 View Controller 工厂,不如将两个 View 子类的实现移动到一个类中,然后添加逻辑以在每个方法中执行不同的操作,或者使用对象状态模式来更改内部实现。

关于ios - Storyboard和 ViewController 工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22406603/

相关文章:

ios - 如何将 UILabel 文本与框的垂直中心对齐

ios - 加载黑色背景的模态视图 Controller

iOS 禁用横向 LaunchScreen.storyboard

ios - 使用 Arduino 的 CoreBluetooth 外设

ipad - iOS 网络应用程序(尤其是 iPad)的多个 "apple-touch-startup-image"分辨率?

ios - UIBarButton 在空的 ViewControllers 中不可点击

ios - 从其 subview Controller 之一中删除 UIPageViewController 的正确过程是什么?

Xcode 4.2 iOS 5 : Multiple segues from a UITableView

ios - 从另一个 Storyboard呈现 View Controller

ios - 在 iPhone 上,如何在从服务器加载时显示动画?