问题
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
}
回答1:
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
回答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;
来源:https://stackoverflow.com/questions/43650719/uitableviewcell-as-uiview-from-xib