Как загрузить xib файл в UIView
Я искал везде, и до сих пор ничего не работало для меня.
В принципе, я хочу иметь .xib файл с именем rootView.xib и внутри него я хочу иметь UIView (разрешает вызов containerView), который занимает только половину экрана (так что будет обычный просмотр и новый Посмотреть). Затем я хочу другой .xib файл с именем firstView.xib и загрузить его внутри containerView. Таким образом, у меня может быть множество вещей на firstView.xib и куча разных вещей в rootView.xib и загрузить мой firstView.xib внутри containerView в rootView.xib, но поскольку он занимает только половину экрана, вы все равно увидите на rootView.xib
Ответы
Ответ 1
Чтобы получить объект из 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];
Ответ 2
Я создал образец проекта на github для загрузки UIView из файла .xib внутри другого .xib файла. Или вы можете сделать это программно.
Это полезно для небольших виджетов, которые вы хотите использовать повторно в разных объектах UIViewController.
Ответ 3
Вы можете попробовать:
UIView *firstViewUIView = [[[NSBundle mainBundle] loadNibNamed:@"firstView" owner:self options:nil] firstObject];
[self.view.containerView addSubview:firstViewUIView];
Ответ 4
[Быстрая реализация]
Универсальный способ загрузки представления из 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))
}
}
Ответ 5
Создать файл XIB:
Файл → новый файл → ios → cocoa touch class → next
убедитесь, что флажок "также создает файл XIB"
Я хотел бы выполнить с tableview
, поэтому я выбрал подкласс UITableViewCell
вы можете выбрать в качестве своей заявки
XIB файл по вашему желанию (RestaurantTableViewCell.xib)
нам нужно захватить высоту строки, чтобы установить таблицу для каждой строки hegiht
Теперь! нужно спрятать их быстрый файл. я обручен restaurantPhoto
и restaurantName
, вы можете всех вас заманить.
Теперь добавим UITableView
имя
Имя файла nib, который не должен содержать расширение .nib.
владелец
Объект для назначения в качестве объекта File Owner Owner.
параметры
Словарь, содержащий параметры, используемые при открытии файла 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
}
}
вы сделали:)