Как загрузить xib-файл в UIView
Я искал везде и ничего до сих пор работает для меня.
в основном я хочу иметь .xib файл называется rootView.xib и внутри него я хочу иметь UIView (давайте назовем его containerView), который занимает только половину экрана (так что будет обычный вид и новый вид). Тогда я хочу другого .xib файл называется firstView.xib и загрузить его внутри containerView. Так что я могу иметь кучу вещей, на первый взгляд.xib и куча разных вещей в rootView.xib и загрузить мой firstView.xib внутри containerView в rootView.xib но так как он занимает только половину экрана, вы все равно увидите материал на rootView.xib
6 ответов:
для получения объекта из xib файла программно можно использовать:
[[NSBundle mainBundle] loadNibNamed:@"MyXibName" owner:self options:nil]
который возвращает массив объектов верхнего уровня в xib.Итак, вы может сделать что-то вроде этого:
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];
Я создал пример проекта на github для загрузки UIView из a .xib файл внутри другого .файл xib. Или вы можете сделать это программно.
Это хорошо для маленьких виджетов, которые вы хотите использовать на разных объектах UIViewController.
- новый подход:https://github.com/PaulSolt/CustomUIView
- оригинальный подход:https://github.com/PaulSolt/CompositeXib
вы можете попробовать:
UIView *firstViewUIView = [[[NSBundle mainBundle] loadNibNamed:@"firstView" owner:self options:nil] firstObject]; [self.view.containerView addSubview:firstViewUIView];
[Быстрое Исполнение]
универсальный способ загрузки вида из xib:
пример:
let myView = NSBundle.loadView(fromNib: "MyView", withType: MyView.self)
реализация:
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)) } }
создать XIB файл:
-7-->новый файл ->прошивкой->сенсорная класс -> какао следующейубедитесь, что флажок "также создать XIB файл"
Я хотел бы выступить с
tableview
поэтому я выбрал подклассUITableViewCell
вы можете выбрать как ваш requerment
XIB file desing по вашему желанию (RestaurantTableViewCell.xib)
нам нужно захватить высоту строки, чтобы установить таблицу каждой строки hegiht
сейчас! нужно зацепить их стремительным файлом . я хукнул
restaurantPhoto
иrestaurantName
вы можете подцепить всех вас .теперь добавление UITableView
имя
Имя файла nib, который не должен включать в себя .расширение пера.владелец
Объект для назначения в качестве объекта владельца файла наконечника.опции
Словарь, содержащий параметры при открытии файла nib.первый если вы не определяете сначала, то захватите все представление .. так что вам нужно захватите один вид внутри этого набора
frist
.Bundle.main.loadNibNamed("yourUIView", owner: self, options: nil)?.first as! yourUIView
вот полный код контроллера представления таблицы
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 } }
вы молодец :)