Saturday, May 2, 2026
HomeiOS DevelopmentUIKit init patterns - The.Swift.Dev.

UIKit init patterns – The.Swift.Dev.

[ad_1]

UIViewController init

Truly UIViewController intialization is fairly easy. You solely should override a couple of strategies if you wish to be in full management. It relies on the circumstances which init might be known as, if you’re utilizing a storyboard, init(coder) is the one that you’re searching for. If you’re attempting to provoke your controller from an exterior nib file, init(nib,bundle) goes to be known as. You even have a 3rd choice, you may initialize a controller programmatically from code. Lengthy story brief, with a view to make a sane init course of, it’s important to take care of all these things.

Let me introduce two patterns for UIViewControllers, the primary one is only a frequent init perform that will get known as in each case that might initialize a controller.

import UIKit

class ViewController: UIViewController {

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        tremendous.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

        self.initialize()
    }

    required init?(coder aDecoder: NSCoder) {
        tremendous.init(coder: aDecoder)

        self.initialize()
    }

    init() {
        tremendous.init(nibName: nil, bundle: nil)

        self.initialize()
    }

    func initialize() {
        
    }
}

You may also cover the init(nib,bundle) and init(coder) strategies from the longer term subclasses. You do not have to override init(nib,bundle) and you may mark the init(coder) as a comfort initializer. It looks like slightly bit hacky answer and I do not prefer it an excessive amount of, however it does the job.

import UIKit

class ViewController: UIViewController {

    init() {
        tremendous.init(nibName: nil, bundle: nil)

        self.initialize()
    }

    required comfort init?(coder aDecoder: NSCoder) {
        self.init(coder: aDecoder)

        self.initialize()
    }

    func initialize() {
        
    }
}

class MyFutureViewController: ViewController {

    override init() {
        tremendous.init()
    }
}
let vc = MyFutureViewController()

UIView init

I normally create a typical initializer for UIViews to make the init course of extra nice. I additionally set the translate autoresizing masks property to false in that initializer technique, as a result of it is 2017 and noone makes use of springs & struts anymore, proper?

import UIKit

class View: UIView {

    init() {
        tremendous.init(body: .zero)

        self.initialize()
    }

    override init(body: CGRect) {
        tremendous.init(body: body)

        self.initialize()
    }

    required init?(coder aDecoder: NSCoder) {
        tremendous.init(coder: aDecoder)

        self.initialize()
    }

    func initialize() {
        self.translatesAutoresizingMaskIntoConstraints = false
    }
}

It is also good to have some autolayout helpers, and if you wish to initialize a view from a nib file, it is actually good to have some comfort technique round.

import UIKit

extension UIView {

    public comfort init(autolayout: Bool) {
        self.init(body: .zero)

        self.translatesAutoresizingMaskIntoConstraints = !autolayout
    }

    public static func create(autolayout: Bool = true) -> Self {
        let _self = self.init()
        let view  = _self as UIView
        view.translatesAutoresizingMaskIntoConstraints = !autolayout
        return _self
    }

    public static func createFromNib(proprietor: Any? = nil, choices: [AnyHashable: Any]? = nil) -> UIView {
        return Bundle.foremost.loadNibNamed(String(describing: self), proprietor: proprietor, choices: choices)?.final as! UIView
    }
}
let view = UIView(autolayout: true)

Utilizing these snippets, it is very easy to take care of a sane init course of for all of the UIKit lessons, as a result of most of them ared derived from these two “main” lessons.

[ad_2]

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments