UIView में xib फाइल कैसे लोड करें


111

मैं हर जगह खोज रहा हूं और अब तक कुछ भी मेरे लिए काम नहीं किया है।

मूल रूप से मैं एक .xib फ़ाइल को rootView.xib नाम देना चाहता हूं और इसके अंदर मैं एक UIView (इसे कंटेनरव्यू कह सकता हूं) चाहता हूं जो स्क्रीन के केवल आधे हिस्से को लेता है (इसलिए इसमें नियमित दृश्य और नया दृश्य होगा)। फिर मुझे एक अलग .xib फ़ाइल चाहिए जिसे firstView.xib कहा जाता है और इसे कंटेनर दृश्य के अंदर लोड करना है। इसलिए मेरे पास पहले दृश्य में सामान का एक गुच्छा हो सकता है और rootView.xib में विभिन्न सामानों का एक गुच्छा हो सकता है और rootView.xib में कंटेनर दृश्य के अंदर अपना पहला दृश्य लोड कर सकते हैं। लेकिन चूंकि यह केवल स्क्रीन का आधा हिस्सा लेता है, फिर भी आप अभी भी देखेंगे। rootView.xib पर सामग्री


2
ध्यान दें, यह खोज पुरातन है। अब कई वर्षों के लिए, बस कंटेनर दृश्य ट्यूटोरियल का
Fattie

जवाबों:


181

किसी ऑब्जेक्ट को 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];

@PaulSolt सर मेरे पास इस खोज से संबंधित एक प्रश्न है। मैं स्लाइड मेन्यू के रूप में xib का सबव्यू खोलना चाहता हूं। जब मैं दृश्य नियंत्रक से मेनू बटन पर क्लिक करता हूं केवल सबव्यू (जो कि xib की आधी स्क्रीन है) स्लाइड होना चाहिए। यदि संभव हो तो कृपया मदद करें।
संदीप तोमर

यह साथ काम नहीं करता है thisView.alpha = 0, thisView.superview(शून्य दिखाता है)
जैक

24

मैं एक .xib फ़ाइल के अंदर एक .IV फ़ाइल से एक UIView लोड करने के लिए गिटहब पर एक नमूना परियोजना बनाई। या आप इसे प्रोग्रामेटिक रूप से कर सकते हैं।

यह उन छोटे विजेट के लिए अच्छा है, जिन्हें आप अलग-अलग UIViewController वस्तुओं पर फिर से उपयोग करना चाहते हैं।

  1. नया दृष्टिकोण: https://github.com/PaulSolt/CustomUIView
  2. मूल दृष्टिकोण: https://github.com/PaulSolt/CompositeXib

.Xib फ़ाइल से एक कस्टम UIView लोड करें


महान काम, महान काम करता है! क्या आप अभी भी इसे स्वयं उपयोग कर रहे हैं? :)
एंथोपैक

मैं अपने BrewCoffApp.com में एक कस्टम दृश्य के लिए स्टोरीबोर्ड और XIB फ़ाइल के साथ इस लोडिंग तकनीक का उपयोग करता हूं जब कॉफी नुस्खा शुरू हो गया है।
पॉल सोल्ट

21

तुम कोशिश कर सकते हो:

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

यह ठीक नहीं है कि आपने क्या सुझाव दिया है। उन्होंने कहा कि उनके "rootView.xib" का स्क्रीन का आकार "कंटेनर व्यू" के आकार का आधा होगा। और कन्टेनरव्यू में वह अपने nib "firstView.xib" की सामग्री लोड करना चाहता था।
NJones

19

[स्विफ्ट कार्यान्वयन]

Xib से दृश्य लोड करने का सार्वभौमिक तरीका:

उदाहरण:

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

कार्यान्वयन:

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))
    }
}

1
नवीनतम स्विफ्ट के अनुसार:let view = Bundle.main.loadNibNamed(name, owner: nil, options: nil)?.first as? T
s.zainulabideen

6

एक XIB फ़ाइल बनाएँ:

फ़ाइल -> नई फ़ाइल -> ios-> कोको स्पर्श वर्ग -> अगला

यहां छवि विवरण दर्ज करें

सुनिश्चित करें कि चेक मार्क "XIB फ़ाइल भी बनाएं"

मैं इसके साथ प्रदर्शन करना चाहूंगा tableviewइसलिए मैंने उपवर्ग चुनाUITableViewCell

आप अपने requerment के रूप में चुन सकते हैं

यहां छवि विवरण दर्ज करें

आपकी इच्छा के अनुसार XIB फ़ाइल वांछित (RestaurantTableViewCell.xib)

यहां छवि विवरण दर्ज करें

हमें प्रत्येक पंक्ति को निर्धारित करने के लिए पंक्ति की ऊँचाई को पकड़ना होगा

यहां छवि विवरण दर्ज करें

अभी! उन्हें स्विफ्ट फ़ाइल को हिट करने की आवश्यकता है। मैं hucked हूँ restaurantPhotoऔर restaurantNameआप सभी को huck कर सकते हैं।

यहां छवि विवरण दर्ज करें

अब एक UITableView जोड़ रहा है

यहां छवि विवरण दर्ज करें

नाम
nib फ़ाइल का नाम, जिसमें .nib एक्सटेंशन शामिल नहीं है।

स्वामी
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
    }

}

तुमने किया :)

यहां छवि विवरण दर्ज करें


1
क्या आप बता सकते हैं। क्यों नीचे मतदान किया तो मुझे खुशी होगी
नज़्मुल हसन

6
आपका उदाहरण xib लोडिंग से देखने के लिए ठीक है। लेकिन TableView के लिए यह गलत है - पुन: प्रयोज्य सेल सही तरीका है
विक्टर

4

स्विफ्ट 3 और 4 के लिए

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

2

के लिए स्विफ्ट 4.2

मान लेते हैं कि आपके पास एक वर्ग है जिसका नाम NibView है और संबंधित nib फ़ाइल 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
    }

}

कक्षा का एक उदाहरण बनाएं और अपने विशिष्ट लेआउट के साथ अपने विचार में जोड़ें जो आप चाहते हैं

let myView = NibView.getScreen()
self.yourView.addSubview(myView)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.