Как загрузить 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.

Load a Custom UIView from .xib file

Ответ 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
    }

}

вы сделали:)

введите описание изображения здесь