Как загрузить файл XIB в UIView

Я искал везде, и до сих пор у меня ничего не получалось.

По сути, я хочу иметь файл .xib с именем rootView.xib, а внутри него я хочу иметь UIView (давайте назовем его containerView), который занимает только половину экрана (так что будет обычный вид и новый Посмотреть). Затем я хочу другой файл .xib с именем firstView.xib и загружаю его в containerView. Так что я могу иметь кучу вещей в firstView.xib и кучу разных вещей в rootView.xib и загрузить свой firstView.xib внутри containerView в rootView.xib, но, поскольку он занимает только половину экрана, вы все равно увидите материал в rootView.xib

103 голоса | спросил Matt 19 +04002011-10-19T03:24:26+04:00312011bEurope/MoscowWed, 19 Oct 2011 03:24:26 +0400 2011, 03:24:26

6 ответов


0

Чтобы получить объект из файла 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];
ответил chown 19 +04002011-10-19T03:31:14+04:00312011bEurope/MoscowWed, 19 Oct 2011 03:31:14 +0400 2011, 03:31:14
0

Я создал пример проекта на github для загрузки UIView из файла .xib внутри другого файла .xib. Или вы можете сделать это программно.

Это хорошо для маленьких виджетов, которые вы хотите использовать в разных объектах UIViewController.

  1. Новый подход: https://github.com/PaulSolt/CustomUIView
  2. Оригинальный подход: https://github.com/PaulSolt/CompositeXib

Загрузить пользовательский UIView из файла .xib

ответил Paul Solt 23 AM00000020000002131 2013, 02:54:21
0

Вы можете попробовать:

UIView *firstViewUIView = [[[NSBundle mainBundle] loadNibNamed:@"firstView" owner:self options:nil] firstObject];
[self.view.containerView addSubview:firstViewUIView];
ответил NJones 19 +04002011-10-19T06:14:33+04:00312011bEurope/MoscowWed, 19 Oct 2011 06:14:33 +0400 2011, 06:14:33
0

[Быстрое внедрение]

Универсальный способ загрузки вида из 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))
    }
}
ответил Максим Мартынов 20 +03002016-10-20T16:22:04+03:00312016bEurope/MoscowThu, 20 Oct 2016 16:22:04 +0300 2016, 16:22:04
0

Создайте файл XIB:

  

Файл -> новый файл -> ios-> класс касания какао -> следующий

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

убедитесь, что флажок "также создать файл XIB"

Я хотел бы выступить с tableview, поэтому я выбрал подкласс UITableViewCell

вы можете выбрать в качестве своего запроса

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

Файл XIB по вашему желанию (RestaurantTableViewCell.xib)

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

нам нужно взять высоту строки, чтобы установить таблицу каждой строки хегихт

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

Теперь! нужно взломать их быстрым файлом. меня взломали restaurantPhoto и restaurantName вы могу поиметь вас всех

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

Теперь добавляем UITableView

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

имя
Имя файла пера, который не обязательно должен содержать расширение .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
    }

}

вы сделали :)

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

ответил Nazmul Hasan 1 22016vEurope/Moscow11bEurope/MoscowTue, 01 Nov 2016 02:30:31 +0300 2016, 02:30:31
0

Для Swift 3 & 4

let customView = Bundle.main.loadNibNamed("CustomView", owner: nil, options: nil)?.first as? CustomView
ответил raed 13 MarpmTue, 13 Mar 2018 15:42:56 +03002018-03-13T15:42:56+03:0003 2018, 15:42:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132