JuicyFruit
JuicyFruit

Reputation: 2668

UITableViewCell as UIView from XIB

I have CustomTableViewClass in XIB, adding it to UITableView like

class RestaurantsTableView: UITableView {
    override func awakeFromNib() {
        self.register(UINib(nibName: "RestaurantTableViewCell", bundle: nil), forCellReuseIdentifier: "restaurantCell")
    }
}

and everything works fine, now I would like to use this CustomTableViewClass as UIView in some other UIViewController, but I do not get how to properly override its init(coder aCoder: NSCoder) function, cause I do not need one for UITableView case and when I implement it like I do for other custom XIB views it crashes with nil

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    let _ = Bundle.main.loadNibNamed("RestaurantTableViewCell", owner: self, options: nil)?[0] as! UIView
}

Upvotes: 7

Views: 7049

Answers (2)

Nirav D
Nirav D

Reputation: 72440

There is one way you can use contentView property of UITableViewCell which of type UIView. So simply get RestaurantTableViewCell as you previously getting from nib then use its contentView to get the UIView from it.

let cell = Bundle.main.loadNibNamed("RestaurantTableViewCell", owner: self, options: nil)?[0] as! RestaurantTableViewCell
let yourView = cell.contentView

Upvotes: 22

Dheina Lundi A
Dheina Lundi A

Reputation: 21

Try this code :

    var views:NSArray = NSBundle.mainBundle().loadNibNamed("Your_Xib_file", owner: self, options: nil);
    var yourView:UIView = views.objectAtIndex(0) as! UIView;

Upvotes: 2

Related Questions