Subclassing a subclassed UIViewController that has a xib

If you only have an xib for the parent class (but none of the subclasses), you can just do this in your subclass init:

- (instancetype) init {
    if (self = [super initWithNibName:@"ParentViewController" bundle:nil]) {
      // init stuff for subclass
    }
    return self;
 }

Here's an example project:

https://github.com/annabd351/SubClassFromParentNib


If someone is looking for a Swift solution, you can use Convenience initializers on the subclass and initialise it using the super class xib.

In your subclass use the convenience initializer as:

class ChildController: BaseViewController {

    convenience init() {
        self.init(nibName: "BaseViewControllerXib", bundle: nil)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

And then when creating the child class object just use.

let childViewController = ChildController()
navigationController.pushViewController(childViewController, animated: true)

This way you can use the xib from the parent viewController.