UITableViewCell as UIView from XIB
Asked Answered
C

2

7

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
}
Calvin answered 27/4, 2017 at 6:59 Comment(1)
did you assign CustomTableViewClass class in storyBoard ?Ceresin
E
22

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
Engrain answered 27/4, 2017 at 7:19 Comment(0)
O
2

Try this code :

    var views:NSArray = NSBundle.mainBundle().loadNibNamed("Your_Xib_file", owner: self, options: nil);
    var yourView:UIView = views.objectAtIndex(0) as! UIView;
Overmuch answered 27/4, 2017 at 7:12 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.