UIView

2011-10-18 20 views
91

में xib फ़ाइल को लोड करने के लिए कैसे मैं हर जगह खोज रहा हूं और अब तक मेरे लिए कुछ भी नहीं किया है।UIView

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

+2

नोट है, इस questin पुरातन है। कई सालों से, बस कंटेनर दृश्यों का उपयोग करें [ट्यूटोरियल] (http://stackoverflow.com/questions/23399061/objective-c-how-to-add-a-subview-that-has-its-own-uiviewcontroller/23403979 # 23403979) – Fattie

उत्तर

162

प्रोग्रामिंग रूप से एक 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]; 
+1

@ मैट चेकआउट गिटूब पर मेरा समाधान। https://github.com/PaulSolt/CompositeXib –

+0

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

+0

यह 'thisView.alpha = 0', 'thisView.superview' (दिखाता है) के साथ काम नहीं करता है – Jack

13

आप की कोशिश कर सकते:

तो, आप कुछ इस तरह कर सकता है

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

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

23

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

यह छोटे विगेट्स के लिए अच्छा है जिसे आप विभिन्न UIViewController ऑब्जेक्ट्स पर पुन: उपयोग करना चाहते हैं।

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

Load a Custom UIView from .xib file

7

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

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

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

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

enter image description here

"भी XIB फ़ाइल बनाने"

मैं tableview के साथ प्रदर्शन करना चाहते हैं तो मैं उपवर्ग UITableViewCell

choosed आप अपने requerment

enter image description here

XIB फ़ाइल के रूप में चुन सकते हैं यकीन है कि जाँच चिह्न बनाने आपकी इच्छा के रूप में desing (RestaurantTableViewCell।xib)

enter image description here

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

enter image description here

अब स्थापित करने के लिए की जरूरत है! उन्हें त्वरित फ़ाइल को पकड़ने की जरूरत है। मुझे restaurantPhoto और restaurantName पर हमला किया गया है, आप सभी को हुक कर सकते हैं।

enter image description here

अब

enter image description here

नाम
निब फ़ाइल है, जो .nib विस्तार शामिल नहीं की जरूरत है का नाम जोड़ना एक UITableView

मालिक
वस्तु निब की फ़ाइल के मालिक वस्तु के रूप में आवंटित करने के लिए।

विकल्पों
एक शब्दकोश विकल्पों युक्त जब निब फ़ाइल को खोलने का उपयोग करें।

पहले .. यदि आप पहले परिभाषित नहीं करते तो सभी दृश्य grabing इसलिए यदि आप एक दृश्य हड़पने के लिए अंदर है कि सेट 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 
    } 

} 

आप कर :)

enter image description here

+0

क्या आप कृपया बता सकते हैं। क्यों मतदान किया गया तो मुझे खुशी होगी –

+4

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