由于UI编码,我的ViewController变得非常大

时间:2017-11-11 11:57:37

标签: ios swift

目前我正在开发一个项目,该项目在 viewController 中完成了所有任务。由于 viewController 上有太多元素,我选择使用编码执行 UI ,如下所示:

  let myButton: UIButton = {
    let button = UIButton(type: .system)
    button.addTarget(self, action: #selector(openFunction), for: .touchUpInside)
    button.translatesAutoresizingMaskIntoConstraints = false
    return button
}()

因为有很多按钮查看 texifield 标签等以及所有约束用代码编写,我的 viewController 类变得越来越大。如何将所有 UI 代码保存在单独的文件中并集成到我的 viewController 中?我不知道可能有这么简单的方法,但实际上我正在努力。任何建议都会非常有用。

3 个答案:

答案 0 :(得分:1)

欢迎来到设计模式和代码架构的世界。他们有各种方法来完成你所追求的目标。这是一个很好的迹象,你能够尽早发现这个问题。

您可以开始查看 MVVM,VIPER,ReSwift 等。适合您应用需求的研究。

在视图控制器中减少UI代码的建议:

就减少视图控制器中增长的UI代码而言,我建议开始创建公共元素的子类并使用代码DRY。例如,如果多次创建具有相同字体和边框等的UIButton,那么请查看为其创建子类并在此子类中移动配置。

您还可以在屏幕上创建逻辑元素的子视图,例如,您有一个带按钮和标签的标题,然后将其移动到子类中,并从此处开始使用此子类。这应该可以提高代码的可读性和重用性。

您还可以通过create extensions公共布局减少很多自动布局代码,例如固定到所有角落等,这样,样板自动布局代码的重复就会少得多。

答案 1 :(得分:1)

Carbonr提出的替代方案是利用Interface Builder。使用Interface Builder,您可以从包含代码的控制器创建一个或多个StoryBoards并分离UI元素和约束。显然,如果您不熟悉Interface Builder,那将会有一个学习曲线。

答案 2 :(得分:0)

您特定代码的具体答案是在convenience的扩展程序中创建UIButton初始值设定项。

extension UIButton {
    convenience init(_ target:Any, _ action:Selector) {
        self.init(CGRect.zero)
        self.addTarget(target, action:action)
        self.translatesAutoresizingMaskIntoConstraints = false
    }
}

在那里你可能会削减你VC中的东西。

接下来,考虑将此 - 以及所有 - UI代码移出VC文件并转移到其他文件中。我通常会根据需要将扩展​​/子类移动到尽可能多的文件中。 (构建可能需要更长时间,但最终的二进制文件应该是相同的大小。)对于大型项目,这有助于使事情易于管理。

同时考虑对VC 进行扩展,特别是进行自动布局(我看到你正在使用它,因为你正在设置UIButton自动调整大小掩码)。只要您在主子类VC中声明对象,就会将自动布局的“详细”性质移除到它自己的文件中。

对于多开发人员项目和/或真正的“可重用”代码,您可以做的最后一件事就是将代码移动到Framework目标中。