Cómo cargar un archivo xib en una UIView

He estado buscando en todas partes y hasta ahora nada ha funcionado para mí.

Básicamente quiero tener un archivo .xib llamado rootView.xib y dentro de él quiero tener un UIView (vamos a llamarlo containerView) que ocupa solo la mitad de la pantalla (por lo que sería la vista regular y una nueva vista). Luego quiero un archivo .xib diferente llamado firstView.xib y cargarlo dentro de containerView. Así que puedo tener un montón de cosas en FirstView.xib y un montón de cosas diferentes en rootView.xib y cargar mi primerView.xib dentro de containerView en rootView.xib pero dado que solo ocupa la mitad de la pantalla, aún verías el cosas en rootView.xib

Para obtener un objeto de un archivo xib programáticamente puede usar: [[NSBundle mainBundle] loadNibNamed:@"MyXibName" owner:self options:nil] que devuelve una matriz de los objetos de nivel superior en el xib.

Entonces, podrías hacer algo como esto:

 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]; 

Creé un proyecto de muestra en github para cargar un UIView desde un archivo .xib dentro de otro archivo .xib. O puede hacerlo programáticamente.

Esto es bueno para pequeños widgets que desea reutilizar en diferentes objetos UIViewController.

  1. Nuevo enfoque: https://github.com/PaulSolt/CustomUIView
  2. Enfoque original: https://github.com/PaulSolt/CompositeXib

Cargue una UIView personalizada desde el archivo .xib

Tu podrías intentar:

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

[Implementación Swift]

Forma universal de cargar vista desde xib:

Ejemplo:

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

Implementación:

 extension NSBundle { static func loadView(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)) } } 

Crea un archivo XIB:

Archivo -> nuevo archivo -> ios-> clase de toque de cocoa -> siguiente

enter image description here

asegúrese de que la marca de verificación “también cree un archivo XIB”

Me gustaría trabajar con tableview así que UITableViewCell subclase UITableViewCell

puedes elegir como tu requerimiento

enter image description here

Diseño de archivo XIB como desee (RestaurantTableViewCell.xib)

enter image description here

tenemos que agarrar la altura de la fila para establecer la tabla de cada fila hegiht

enter image description here

¡Ahora! Necesito darles un rápido archivo. Me gustaron el restaurantPhoto y restaurantName , puedes colmarte a todos.

enter image description here

Ahora agregando un UITableView

enter image description here

nombre
El nombre del archivo nib, que no necesita incluir la extensión .nib.

propietario
El objeto para asignar como objeto propietario del archivo de punta.

opciones
Un diccionario que contiene las opciones para usar al abrir el archivo de punta.

primero si no defines primero y luego grabas toda la vista … entonces necesitas tomar una vista dentro de ese conjunto de frist .

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

aquí está el controlador de vista de tabla Código completo

 import UIKit class RestaurantTableViewController: UIViewController ,UITableViewDataSource,UITableViewDelegate{ override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.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 } } 

lo hiciste 🙂

enter image description here

Para swift 3 y 4

 let customView = Bundle.main.loadNibNamed("CustomView", owner: nil, options: nil)?.first as? CustomView