কোনও ইউআইভিউতে কীভাবে একটি xib ফাইল লোড করবেন


111

আমি সর্বত্র অনুসন্ধান করে চলেছি এবং এখন পর্যন্ত কিছুই আমার পক্ষে কাজ করে নি।

মূলত আমি রুটভিউ.সিব নামে একটি .xib ফাইল রাখতে চাই এবং এর অভ্যন্তরে আমি একটি ইউআইভিউ (এটি কনটেইনারভিউ বলতে পারি) করতে চাই যা কেবলমাত্র পর্দার অর্ধেক সময় নেয় (তাই সেখানে নিয়মিত দৃশ্য এবং একটি নতুন দৃশ্য থাকবে)। তারপরে আমি ফার্স্টভিউ.এক্সিব নামে একটি আলাদা .xib ফাইল চাই এবং এটি কনটেইনারভিউয়ের ভিতরে লোড করব। সুতরাং আমি ফার্স্টভিউ.এক্সিবের উপর একটি গুচ্ছ এবং রুটভিউ.সিবিবে বিভিন্ন স্টাফের গুচ্ছ রাখতে পারি এবং রুটভিউ.অক্সিবের আমার প্রথমভিউ.এক্সিবকে ধারকভীভের ভিতরে লোড করতে পারি তবে যেহেতু এটি কেবল পর্দার অর্ধেক সময় নেয় আপনি এখনও দেখতে পাবেন রুটভিউ.সিবিবে স্টাফ


2
দ্রষ্টব্য, এই কোয়েস্টিনটি প্রত্নতাত্ত্বিক। এখন অনেক বছর ধরে, কেবল ধারক দর্শন টিউটোরিয়ালটি
ফ্যাটি

উত্তর:


181

এক্সবি ফাইল থেকে কোনও অবজেক্টটি প্রোগ্রামক্রমেটিকভাবে পেতে আপনি ব্যবহার করতে পারেন: [[NSBundle mainBundle] loadNibNamed:@"MyXibName" owner:self options:nil]যা এক্সিবের শীর্ষ স্তরের অবজেক্টগুলির একটি অ্যারে প্রদান করে।

সুতরাং, আপনি পারে ভালো কিছু করতে:

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

@ পলসোল্ট স্যার আমার এই কোয়েস্টন সম্পর্কিত একটি প্রশ্ন আছে। আমি স্লাইড মেনু হিসাবে xib এর সাবভিউ খুলতে চাই। আমি যখন ভিউ কন্ট্রোলার থেকে মেনু বোতামে ক্লিক করি কেবলমাত্র সাবউভিউ (যা xib এর অর্ধেক পর্দা) স্লাইড হওয়া উচিত। সম্ভব হলে দয়া করে সহায়তা করুন।
সন্দীপ তোমার

এটি দিয়ে কাজ করে না thisView.alpha = 0, thisView.superview(শূন্য দেখায়)
জ্যাক

24

আমি অন্য .xib ফাইলের মধ্যে একটি .xib ফাইল থেকে একটি ইউআইভিউ লোড করতে গিথুবটিতে একটি নমুনা প্রকল্প তৈরি করেছি। অথবা আপনি প্রোগ্রামগতভাবে এটি করতে পারেন।

আপনি বিভিন্ন ইউআইভিউকন্ট্রোলার বস্তুগুলিতে পুনরায় ব্যবহার করতে চান এমন ছোট্ট উইজেটগুলির জন্য এটি ভাল।

  1. নতুন দৃষ্টিভঙ্গি: https://github.com/PaulSolt/CustomUIView
  2. আসল পন্থা: https://github.com/Pululolt/CompositeXib

.Xib ফাইল থেকে একটি কাস্টম ইউআইভিউ লোড করুন


দুর্দান্ত কাজ, দুর্দান্ত কাজ! আপনি এখনও এটি ব্যবহার করছেন? :)
আন্তোপাক

কফি রেসিপিটি শুরু হয়ে গেলে আমি আমার স্ট্রেডবোর্ড এবং এক্সআইবি ফাইলের সাথে ক্রেডিট ভিউটির জন্য আমার ব্রেউকফিএপ.কম এ কাস্টম ভিউ ব্যবহার করি ।
পল সোল্ট

21

আপনি চেষ্টা করতে পারেন:

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

আপনি যে পরামর্শ দিয়েছিলেন তা অবিকল নয়। তিনি বলেছিলেন যে তার "রুটভিউ.জিব" এর "কন্টেইনারভিউ" নামের পর্দার অর্ধেক আকারের একটি সাবভিউ থাকবে। এবং কনটেইনারভিউতে তিনি তাঁর নিব "ফার্স্টভিউ.সিবিব" এর সামগ্রীগুলি লোড করতে চেয়েছিলেন।
এনজোনস

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

একটি এক্সআইবি ফাইল তৈরি করুন:

ফাইল -> নতুন ফাইল -> আইওএস-> কোকো টাচ শ্রেণি -> পরবর্তী

এখানে চিত্র বর্ণনা লিখুন

নিশ্চিত করে নিন যে চেক চিহ্নটি "এক্সআইবি ফাইলও তৈরি করবে"

আমি উপস্থাপন করতে চাই tableviewতাই আমি সাবক্লাসটি বেছে নিয়েছিUITableViewCell

আপনি আপনার চাহিদা হিসাবে চয়ন করতে পারেন

এখানে চিত্র বর্ণনা লিখুন

XIB ফাইলটি আপনার ইচ্ছানুসারে অনুপস্থিত

এখানে চিত্র বর্ণনা লিখুন

প্রতিটি সারি হেগিটি টেবিল সেট করতে আমাদের সারি উচ্চতা দখল করতে হবে

এখানে চিত্র বর্ণনা লিখুন

এখন! তাদের সুইফ্ট ফাইল হ্যাক করা প্রয়োজন। আমি খুব শক্ত হয়ে গেছি restaurantPhotoএবং restaurantNameআপনি সবাইকে কড়া খেতে পারেন।

এখানে চিত্র বর্ণনা লিখুন

এখন একটি ইউআইটিএবলভিউ যুক্ত করা হচ্ছে

এখানে চিত্র বর্ণনা লিখুন

নাম
নিব ফাইলের নাম, যাতে .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 লোডিং থেকে দেখার জন্য ঠিক আছে। তবে টেবিলভিউয়ের জন্য এটি ভুল - পুনরায় ব্যবহারযোগ্য ঘরগুলি সঠিক উপায়ে
ভিক্টর

4

দ্রুত এবং 3 এর জন্য

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

2

জন্য সুইফট 4.2

আসুন ধরে নেওয়া যাক আপনার কাছে নিব ভিউ নামে একটি শ্রেণি আছে এবং এর সাথে সম্পর্কিত নিব ফাইলটি নিবভিউ.সিবিব

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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.