simpleBob simpleBob - 1 year ago 81
iOS Question

Instantiate UIViewController programatically without nib

I want to create a

programatically without the use of a nib or a storyboard.

I thought it would be enough to implement the

class TestViewController: UIViewController {

override func viewDidLoad() {

//Add some setup code here, without it it should just be blank

instantiate it with
let vc = TestViewController(nibName: nil, bundle: nil)
or just

and then just push it:

navigationController?.pushViewController(vc, animated: true)

But it shows the
(upper bar) with a transparent View (the
behind is being shown, I have a multi-window setup)

Answer Source

According to the docs:

If the view controller does not have an associated nib file, this method creates a plain UIView object instead.

If you do not provide a nib file when instantiating the view controller, UIViewController calls it's loadView() method which creates a plain UIView object and assigns it to its view property.

The reason why you are seeing a transparent view is because the UIView object has no background color. To verify this, you can set the background color of the view controller's view property right before you push it on your navigation stack.

let viewController = TestViewController()
viewController.view.backgroundColor = .blueColor()
navigationController?.pushViewController(viewController, animated: true)