Ios 由于UI编码,我的ViewController变得越来越大

Ios 由于UI编码,我的ViewController变得越来越大,ios,swift,Ios,Swift,目前我正在从事一个项目,该项目在一个单独的视图控制器中完成所有任务。由于viewController上的元素太多,我选择对UI进行编码,如下所示: let myButton: UIButton = { let button = UIButton(type: .system) button.addTarget(self, action: #selector(openFunction), for: .touchUpInside) button.translatesAuto

目前我正在从事一个项目,该项目在一个单独的视图控制器中完成所有任务。由于viewController上的元素太多,我选择对UI进行编码,如下所示:

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

由于有如此多的按钮视图texifield标签等,以及它们所有的约束都是用代码编写的,因此我的视图控制器类越来越大。如何将所有UI代码保存在单独的文件中,并集成到我的viewController中?我不知道有什么简单的方法可以做到这一点,但我确实在努力。任何建议都会很有帮助

欢迎来到设计模式和代码体系结构的世界。它们是实现你所追求的目标的各种方式。这是一个很好的迹象,表明你能够及早发现这个问题

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

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

在减少视图控制器中不断增长的UI代码方面,我建议开始创建公共元素的子类,并保持代码干燥。例如,如果正在多次创建具有相同字体和边框等的UIButton,请查看为其创建的子类,并将配置移到该子类中

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


您还可以通过使用公共布局(如固定到所有角落等)来减少大量autlayout代码,这样一来,样板自动布局代码的重复次数就少多了

欢迎来到设计模式和代码体系结构的世界。它们是实现你所追求的目标的各种方式。这是一个很好的迹象,表明你能够及早发现这个问题

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

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

在减少视图控制器中不断增长的UI代码方面,我建议开始创建公共元素的子类,并保持代码干燥。例如,如果正在多次创建具有相同字体和边框等的UIButton,请查看为其创建的子类,并将配置移到该子类中

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


您还可以通过使用公共布局(如固定到所有角落等)来减少大量autlayout代码,这样一来,样板自动布局代码的重复次数就少多了

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

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

对于您的特定代码,一个具体的答案是在扩展到
UIButton
中创建一个
便利性
初始值设定项

extension UIButton {
    convenience init(_ target:Any, _ action:Selector) {
        self.init(CGRect.zero)
        self.addTarget(target, action:action)
        self.translatesAutoresizingMaskIntoConstraints = false
    }
}
就在那里,你可能正在削减你的风险投资

下一步,考虑把这个和所有UI代码从VC文件中移到其他文件中。我通常会根据需要将扩展名/子类移动到任意多的文件中。(构建可能需要更长的时间,但最终的二进制文件大小应该相同。)对于大型项目,这有助于使事情易于管理

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


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

特定代码的具体答案是在扩展到
UIButton
中创建
便利性
初始值设定项

extension UIButton {
    convenience init(_ target:Any, _ action:Selector) {
        self.init(CGRect.zero)
        self.addTarget(target, action:action)
        self.translatesAutoresizingMaskIntoConstraints = false
    }
}
就在那里,你可能正在削减你的风险投资

下一步,考虑把这个和所有UI代码从VC文件中移到其他文件中。我通常会根据需要将扩展名/子类移动到任意多的文件中。(构建可能需要更长的时间,但最终的二进制文件大小应该相同。)对于大型项目,这有助于使事情易于管理

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


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

感谢您的建议@carbonr,我还认为我可能需要在这里大量使用子类和扩展。最终我想这就是解决问题的方法。我也遵循api处理的设计模式,但从不遵循UI的用户设计模式,您的建议非常宝贵。谢谢您的建议@