it-swarm-id.com

Cara memuat file xib dalam UIView

Saya telah mencari kemana-mana dan sejauh ini tidak ada yang berhasil untuk saya.

Pada dasarnya saya ingin memiliki file .xib bernama rootView.xib dan di dalamnya saya ingin memiliki UIView (sebut saja containerView) yang hanya memakan setengah layar (sehingga akan ada tampilan reguler dan tampilan baru). Lalu saya ingin file .xib yang berbeda bernama firstView.xib dan memuatnya di dalam containerView. Jadi saya dapat memiliki banyak hal di firstView.xib dan banyak hal yang berbeda di rootView.xib dan memuat firstView.xib saya di dalam containerView di rootView.xib tetapi karena hanya membutuhkan setengah layar Anda masih akan melihat hal-hal di rootView.xib

106
Matt

Untuk mendapatkan objek dari file xib secara terprogram Anda dapat menggunakan: [[NSBundle mainBundle] loadNibNamed:@"MyXibName" owner:self options:nil] yang mengembalikan array objek tingkat atas di xib.

Jadi, Anda dapat melakukan sesuatu seperti ini:

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];
177
chown

Saya membuat contoh proyek di github untuk memuat UIView dari file .xib di dalam file .xib lainnya. Atau Anda dapat melakukannya secara terprogram.

Ini bagus untuk widget kecil yang ingin Anda gunakan kembali pada berbagai objek UIViewController.

  1. Pendekatan Baru: https://github.com/PaulSolt/CustomUIView
  2. Pendekatan Asli: https://github.com/PaulSolt/CompositeXib

Load a Custom UIView from .xib file

24
Paul Solt

Kamu bisa mencoba:

UIView *firstViewUIView = [[[NSBundle mainBundle] loadNibNamed:@"firstView" owner:self options:nil] firstObject];
[self.view.containerView addSubview:firstViewUIView];
19
NJones

[Implementasi Cepat]

Cara universal memuat tampilan dari xib:

Contoh:

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

Penerapan:

extension Bundle {

    static func loadView<T>(fromNib name: String, withType type: T.Type) -> T {
        if let view = Bundle.main.loadNibNamed(name, owner: nil, options: nil)?.first as? T {
            return view
        }

        fatalError("Could not load view with type " + String(describing: type))
    }
}

Buat file XIB:

File -> File baru -> ios-> kelas sentuh kakao -> selanjutnya

enter image description here

pastikan tanda centang "juga buat file XIB"

Saya ingin tampil dengan tableview jadi saya memilih subclass UITableViewCell

anda dapat memilih sebagai requerment Anda

enter image description here

File XIB sesuai keinginan Anda (RestaurantTableViewCell.xib)

enter image description here

kita perlu meraih tinggi baris untuk mengatur tabel setiap baris hegiht

enter image description here

Sekarang! perlu meniduri mereka file Swift saya menertawakan restaurantPhoto dan restaurantName Anda dapat meniduri kalian semua.

enter image description here

Sekarang menambahkan UITableView

enter image description here

nama
Nama file nib, yang tidak perlu menyertakan ekstensi .nib.

pemilik
Objek yang akan ditetapkan sebagai objek Pemilik File nib.

opsi
Kamus yang berisi opsi untuk digunakan saat membuka file nib.

pertama jika Anda tidak mendefinisikan terlebih dahulu maka ambil semua tampilan .. jadi Anda perlu mengambil satu tampilan di dalam yang menetapkan frist.

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

di sini adalah pengontrol tampilan tabel Kode lengkap

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
    }

}

kamu sudah selesai :)

enter image description here

5
Nazmul Hasan

ntuk Swift 3 & 4

let customView = Bundle.main.loadNibNamed("CustomView", owner: nil, options: nil)?.first as? CustomView
4
raed

For Swift 4.2

Mari kita asumsikan Anda memiliki kelas bernama NibView dan file nib terkait adalah NibView.xib

class NibView: UIView {

    class func getScreen() -> NibView {
        let xib = Bundle.main.loadNibNamed(String(describing :self), owner: self, options: nil)
        let me = xib![0] as! NibView
        return me
    }

}

buat instance kelas dan tambahkan tampilan Anda dengan tata letak spesifik Anda apa pun yang Anda inginkan

let myView = NibView.getScreen()
self.yourView.addSubview(myView)
1
Noshaid Ali