目前我正在开发一个项目,该项目在 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 中?我不知道可能有这么简单的方法,但实际上我正在努力。任何建议都会非常有用。
答案 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目标中。