swift - 避免使用样板代码在 viewDidLoad 中设置 UI

标签 swift

我只是想知道您是如何使用 Swift 在 IOS 开发中正确设置 UI 的。通常,我觉得我需要在 View Controller 的 viewDidLoad 生命周期方法中放置很多语句来自定义 UI 元素。我知道我可以使用 Storyboard来帮助设置这些 UI 元素,但有时我们需要以编程方式进行一些调整。这些调整导致 viewDidLoad 中出现大量样板代码。 那么,你如何处理这个问题?您的扩展只用于 UI 部分吗?具体类(class)?如何清楚地将 UI 与逻辑分开?

最佳答案

为其制作自定义 View !

如果您发现自己编写了很多此类代码:

myView.someProperty1 = someValue1
myView.someProperty2 = someValue2
myView.someProperty3 = someValue3
myView.someProperty4 = someValue4
myView.someProperty5 = someValue5
myView.addSubView(subView1)
myView.addSubView(subView2)
myView.addSubView(subView3)
...

并且您赋予属性的值都独立于 View Controller ,可能是时候创建自定义 View 了。

这是一个例子:

为您的 View 创建一个xib 文件,并将其命名为与您的自定义 View 相同的名称。您将在此处添加自定义 View 的 subview 以及您需要的所有约束。

然后你可以这样做:

@INDesignable // add this if you want to see your view drawn on the storyboard!
class MyCustomView: UIView {
    @IBOutlet var subView1: UIImageView!
    @IBOutlet var subView2: UITextField!
    @IBOutlet var subView3: UIImageView!

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupView()
    }

    private func setupView() {
        let view = viewFromNibForClass()
        view.frame = bounds
        view.autoresizingMask = [
            UIViewAutoresizing.flexibleWidth,
            UIViewAutoresizing.flexibleHeight
        ]
        addSubview(view)
        // set up your view here...
        // set all the properties and stuff
    }

    private func viewFromNibForClass() -> UIView {

        let bundle = Bundle(for: MyCustomView.self)
        let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil).first as! UIView

        return view
    }
}

关于swift - 避免使用样板代码在 viewDidLoad 中设置 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46752857/

相关文章:

ios - 如何在 Swift 中的标签上制作投影效果?

iOS 如何制作一个函数来接受确认到 NSCoding 的参数

swift - 如何将 indexPath 数组拆分为单独的 indexPath 数组,每个数组的 indexPath 具有相同的 indexPath.section

iOS 在将图像保存到数组时保持 url 数组顺序

ios - 相同 Double 值的奇怪输出

ios - 如何执行从 UIView 到 ViewController 的导航

ios - SpriteKit 缩放影响物理

ios - WKWebView 不显示导航栏

swift - MapMyFitness API 请求出现错误 403

javascript - 在 javascript 中调用原生的 swift 函数