Cómo cargar un file xib en una UIView

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

Básicamente quiero tener un file .xib llamado rootView.xib y dentro de él quiero tener una UIView (llamémosle containerView) que ocupa solo la mitad de la pantalla (de modo que habría una vista normal y una nueva vista). Entonces quiero un file .xib diferente llamado firstView.xib y lo carga 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 firstView.xib dentro de containerView en rootView.xib, pero como solo ocupa la mitad de la pantalla, todavía verías el cosas en rootView.xib

Para get un object de un file xib de manera programática, puede usar: [[NSBundle mainBundle] loadNibNamed:@"MyXibName" owner:self options:nil] que devuelve una matriz de los objects de nivel superior en el xib.

Entonces, puedes 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 ejemplo en github para cargar una UIView desde un file .xib dentro de otro file .xib. O puede hacerlo programáticamente.

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

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

Cargar 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 rápida]

Forma universal de cargar vista desde xib:

Ejemplo:

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

Implementación:

 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)) } } 

Cree un file XIB:

Archivo -> nuevo file -> ios-> cocoa touch class -> next

introduzca la descripción de la imagen aquí

asegúrese de que la marca de verificación "también cree un file XIB"

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

puedes elegir como tu requerimiento

introduzca la descripción de la imagen aquí

Diseño de file XIB como su deseo (RestaurantTableViewCell.xib)

introduzca la descripción de la imagen aquí

tenemos que tomar la altura de la fila para establecer la tabla en cada fila hegiht

introduzca la descripción de la imagen aquí

¡Ahora! necesidad de fastidiarlos file rápido. Estoy ennetworkingado en el restaurantPhoto Photo y restaurantName , puedes divertirte a todos.

introduzca la descripción de la imagen aquí

Ahora agregando un UITableView

introduzca la descripción de la imagen aquí

nombre
El nombre del file nib, que no necesita include la extensión .nib.

propietario
El object a asignar como el object Propietario del file de la punta.

opciones
Un dictionary que contiene las opciones para usar al abrir el file nib.

primero si no define primero y luego graba toda vista … por lo que necesita tomar una vista dentro de ese set frist .

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

aquí está el controller 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 🙂

introduzca la descripción de la imagen aquí