How to load a xib file in a UIView

I have been searching everywhere and nothing so far has worked for me.

Basically I want to have a .xib file called rootView.xib and inside it I want to have a UIView (lets call it containerView) that takes up only half of the screen (so there would be the regular view and a new view). Then I want a different .xib file called firstView.xib and load it inside of containerView. So I can have a bunch of stuff on firstView.xib and a bunch of different stuff in rootView.xib and load my firstView.xib inside of containerView in rootView.xib but since it only takes up half of the screen you would still see the stuff on rootView.xib

  • Adding constraint to the “main view” in a xib
  • Swift - How creating custom viewForHeaderInSection, Using a XIB file?
  • UIViewControllerHierarchyInconsistency when trying to present a modal view controller
  • Error on Dead Outlets / Actions in Interface Builder
  • How to Empty Caches and Clean All Targets Xcode 4 and later
  • Swift - “use of unresolved identifier”
  • 5 Solutions Collect From Internet About “How to load a xib file in a UIView”

    To get an object from a xib file programatically you can use: [[NSBundle mainBundle] loadNibNamed:@"MyXibName" owner:self options:nil] which returns an array of the top level objects in the xib.

    So, you could do something like this:

    UIView *rootView = [[[NSBundle mainBundle] loadNibNamed:@"MyRootView" owner:self options:nil] objectAtIndex:0];
    UIView *containerView = [[[NSBundle mainBundle] loadNibNamed:@"MyContainerView" owner:self options:nil] lastObject];
    [rootView addSubview:containerView];
    [self.view addSubview:rootView];

    I created a sample project on github to load a UIView from a .xib file inside another .xib file. Or you can do it programmatically.

    This is good for little widgets you want to reuse on different UIViewController objects.

    1. New Approach:
    2. Original Approach:

    Load a Custom UIView from .xib file

    You could try:

    UIView *firstViewUIView = [[[NSBundle mainBundle] loadNibNamed:@"firstView" owner:self options:nil] firstObject];
    [self.view.containerView addSubview:firstViewUIView];

    [Swift Implementation]

    Universal way of loading view from xib:


    let myView = NSBundle.loadView(fromNib: "MyView", withType: MyView.self)


    extension NSBundle {
        static func loadView<T>(fromNib name: String, withType type: T.Type) -> T {
            if let view = NSBundle.mainBundle().loadNibNamed(name, owner: nil, options: nil)?.first as? T {
                return view
            fatalError("Could not load view with type " + String(type))

    Create a XIB file :

    File -> new File ->ios->cocoa touch class -> next

    enter image description here

    make sure check mark “also create XIB file”

    I would like to perform with tableview so I choosed subclass UITableViewCell

    you can choose as your requerment

    enter image description here

    XIB file desing as your wish (RestaurantTableViewCell.xib)

    enter image description here

    we need to grab the row height to set table each row hegiht

    enter image description here

    Now! need to huck them swift file . i am hucked the restaurantPhoto and restaurantName you can huck all of you .

    enter image description here

    Now adding a UITableView

    enter image description here

    The name of the nib file, which need not include the .nib extension.

    The object to assign as the nib’s File’s Owner object.

    A dictionary containing the options to use when opening the nib file.

    if you do not define first then grabing all view .. so you need to grab one view inside that set frist .

    Bundle.main.loadNibNamed("yourUIView", owner: self, options: nil)?.first as! yourUIView

    here is table view controller Full code

    import UIKit
    class RestaurantTableViewController: UIViewController ,UITableViewDataSource,UITableViewDelegate{
        override func viewDidLoad() {
            // Do any additional setup after loading the view.
        override func didReceiveMemoryWarning() {
            // Dispose of any resources that can be recreated.
        func numberOfSections(in tableView: UITableView) -> Int {
            return 1
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 5
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let restaurantTableviewCell = Bundle.main.loadNibNamed("RestaurantTableViewCell", owner: self, options: nil)?.first as! RestaurantTableViewCell
            restaurantTableviewCell.restaurantPhoto.image = UIImage(named: "image1")
            restaurantTableviewCell.restaurantName.text = "KFC Chicken"
            return restaurantTableviewCell
       // set row height
        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            return 150

    you done 🙂

    enter image description here