আমি কীভাবে একটি কাস্টম আইওএস ভিউ ক্লাস তৈরি করব এবং এর একাধিক কপি ইনস্ট্যান্ট করব (আইবিতে)?


114

আমি বর্তমানে একটি অ্যাপ তৈরি করছি যা একাধিক টাইমার থাকবে, যা মূলত সমস্ত একই all

আমি একটি কাস্টম ক্লাস তৈরি করতে চাই যা টাইমারগুলির জন্য সমস্ত কোড পাশাপাশি লেআউট / অ্যানিমেশন ব্যবহার করে, তাই আমার কাছে 5 টি অভিন্ন টাইমার থাকতে পারে যা একে অপরের সাথে স্বাধীনভাবে কাজ করে।

আমি আইবি (এক্সকোড ৪.২) ব্যবহার করে লেআউটটি তৈরি করেছি এবং টাইমারগুলির জন্য সমস্ত কোড বর্তমানে কেবলমাত্র ভিউকন্ট্রোলার শ্রেণিতে রয়েছে।

আমার মস্তিষ্ককে কীভাবে কোনও কাস্টম ক্লাসে আবদ্ধ করতে এবং তারপরে এটিকে ভিউকন্ট্রোলারের সাথে যুক্ত করতে পারি তার চারপাশে আমার অসুবিধা হচ্ছে any


এখানে যে কেউ গুগল করছে ... কনটেইনার দর্শন থেকে আইওএসে আসা এখন পাঁচ বছর ! আপনি এখন আইওএসে কীভাবে সবকিছু করেন তার কনটেইনার ভিউগুলি হল মূল, কেন্দ্রীয় ধারণা । তারা ব্যবহার করা অবিশ্বাস্যভাবে সহজ, এবং ধারক ভিউ-এ চমৎকার (পাঁচটি বছর বয়সী!) টিউটোরিয়াল যে কোন সংখ্যার প্রায় হয় উদাহরণস্বরূপ , উদাহরণস্বরূপ
Fattie

2
@ জো ব্লো বাদে আপনি একটি UITableViewCellবা একটিতে ধারক ভিউ ব্যবহার করতে পারবেন না UICollectionViewCell। আমার ক্ষেত্রে আমার একটি ছোট তবে মোটামুটি জটিল দৃষ্টিভঙ্গি দরকার যা আমি নিয়ামক এবং সংগ্রহের দৃশ্যে বহুবার ব্যবহার করতে পারি। এবং ডিজাইনাররা এটি পুনরায় কাজ করে চলেছে, তাই আমি লেআউটটি সংজ্ঞায়িত করে একটি একক জায়গা চাই। অতএব, একটি নিব।
এচেলন

উত্তর:


142

ধারণাগতভাবে উত্তর দিতে ভাল, আপনার টাইমার সম্ভবত UIViewপরিবর্তে এর একটি সাবক্লাস হওয়া উচিত NSObject

আইবিতে আপনার টাইমারের কোনও উদাহরণ ইনস্ট্যান্ট করতে UIViewআপনার ভিউ নিয়ন্ত্রকের দৃশ্যে কেবল একটি ড্রপ টেনে আনুন এবং এটি আপনার টাইমার শ্রেণীর নামের সাথে শ্রেণি নির্ধারণ করুন।

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

#importআপনার ভিউ কন্ট্রোলারে আপনার টাইমার ক্লাসটি মনে রাখবেন ।

সম্পাদনা করুন: আইবি ডিজাইনের জন্য (কোড তাত্ক্ষণিকতার জন্য পুনর্বিবেচনার ইতিহাস দেখুন)

স্টোরিবোর্ডের সাথে আমি মোটেই পরিচিত নই, তবে আমি জানি যে আপনি .xibস্টোরিবোর্ডের সংস্করণটি ব্যবহার করার মতো প্রায় একইরকম একটি ফাইল ব্যবহার করে আইবিতে আপনার ইন্টারফেসটি তৈরি করতে পারেন ; এমনকি আপনার বিদ্যমান ইন্টারফেস থেকে .xibফাইলটিতে সম্পূর্ণরূপে আপনার দর্শনগুলি অনুলিপি করতে এবং পেষ্ট করতে সক্ষম হওয়া উচিত ।

এটি পরীক্ষা করার জন্য আমি একটি নতুন খালি .xib"MyCustomTimerView.xib" নামে তৈরি করেছি । তারপরে আমি একটি ভিউ যুক্ত করেছি এবং তাতে একটি লেবেল এবং দুটি বোতাম যুক্ত করেছি। তাই ভালো:

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

আমি UIView"মাই কাস্টমটাইমার" নামে একটি নতুন উদ্দেশ্য-সি শ্রেণীর সাবক্লাসিং তৈরি করেছি । আমার মধ্যে .xibআমি আমার ফাইলের মালিক শ্রেণিটিকে মাই কাস্টমটাইমার হিসাবে সেট করেছি । এখন আমি অন্যান্য ভিউ / কন্ট্রোলারের মতোই ক্রিয়া এবং আউটলেটগুলি সংযুক্ত করতে মুক্ত। ফলস্বরূপ .hফাইলটি দেখতে এমন দেখাচ্ছে:

@interface MyCustomTimer : UIView
@property (strong, nonatomic) IBOutlet UILabel *displayLabel;
@property (strong, nonatomic) IBOutlet UIButton *startButton;
@property (strong, nonatomic) IBOutlet UIButton *stopButton;
- (IBAction)startButtonPush:(id)sender;
- (IBAction)stopButtonPush:(id)sender;
@end

লাফানোর একমাত্র বাধাটি .xibআমার UIViewসাবক্লাসে এটি পাচ্ছে । .xibনাটকীয়ভাবে ব্যবহার করে প্রয়োজনীয় সেটআপটি হ্রাস করে। এবং যেহেতু আপনি টাইমারগুলি লোড করার জন্য স্টোরিবোর্ডগুলি ব্যবহার করছেন আমরা জানি আমাদের জানা -(id)initWithCoder:একমাত্র প্রারম্ভিক যা বলা হবে। সুতরাং এখানে বাস্তবায়ন ফাইলটি দেখতে কেমন:

#import "MyCustomTimer.h"
@implementation MyCustomTimer
@synthesize displayLabel;
@synthesize startButton;
@synthesize stopButton;
-(id)initWithCoder:(NSCoder *)aDecoder{
    if ((self = [super initWithCoder:aDecoder])){
        [self addSubview:
         [[[NSBundle mainBundle] loadNibNamed:@"MyCustomTimerView" 
                                        owner:self 
                                      options:nil] objectAtIndex:0]];
    }
    return self;
}
- (IBAction)startButtonPush:(id)sender {
    self.displayLabel.backgroundColor = [UIColor greenColor];
}
- (IBAction)stopButtonPush:(id)sender {
    self.displayLabel.backgroundColor = [UIColor redColor];
}
@end

নামকৃত পদ্ধতিটি loadNibNamed:owner:options:যেমনটি শোনাচ্ছে ঠিক তেমনই করে। এটি নিব লোড করে এবং "ফাইলের মালিক" সম্পত্তিটি নিজের মধ্যে সেট করে। আমরা অ্যারেতে প্রথম অবজেক্টটি বের করি এবং এটি হ'ল নীবের মূল দৃশ্য। আমরা ভিউটিকে একটি সংক্ষিপ্তসার হিসাবে যুক্ত করি এবং এটি স্ক্রিনে ভয়েলা।

স্পষ্টতই এটি বোতামগুলি চাপ দিলে লেবেলের পটভূমির রঙ পরিবর্তন করে, তবে এই উদাহরণটি আপনাকে আপনার পথে এগিয়ে যেতে পারে।

মন্তব্যগুলির উপর ভিত্তি করে নোটগুলি:

এটি লক্ষণীয় যে আপনি যদি অসীম পুনরাবৃত্তি সমস্যাগুলি পান তবে আপনি সম্ভবত এই সমাধানটির সূক্ষ্ম কৌশলটি মিস করেছেন। এটি আপনার মনে হয় যা করছে তা করছে না। স্টোরিবোর্ডে যে দৃশ্যটি দেওয়া হয়েছে তা দেখা যায় না, বরং পরিবর্তে অন্য মতামতটিকে একটি সংক্ষিপ্তসার হিসাবে লোড করে। যে ভিউটি এটি লোড করে তা হ'ল ভিউ যা নিবতে সংজ্ঞায়িত হয়। নিবির "ফাইলের মালিক" হ'ল অদেখা দৃশ্য। দুর্দান্ত অংশটি হ'ল এই অদেখা দর্শনটি এখনও একটি উদ্দেশ্য-সি শ্রেণি যা এটি নীব থেকে আনা ভিউর জন্য প্রকারের নিয়ন্ত্রক হিসাবে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ ক্লাসের IBActionপদ্ধতিগুলি MyCustomTimerএমন একটি বিষয় যা আপনি কোনও ভিউয়ের চেয়ে ভিউ কন্ট্রোলারে আরও বেশি আশা করতে পারেন।

পার্শ্ব নোট হিসাবে, কিছু যুক্তি হতে পারে যে এই বিরতি MVCএবং আমি কিছুটা একমত। আমার দৃষ্টিকোণ থেকে এটি একটি কাস্টমটির সাথে আরও ঘনিষ্ঠভাবে সম্পর্কিত UITableViewCell, যা কখনও কখনও অংশ নিয়ামক হতে হয়।

এটিও লক্ষণীয় যে এই উত্তরটি একটি খুব নির্দিষ্ট সমাধান সরবরাহ করেছিল; এমন একটি নিব তৈরি করুন যা স্টোরিবোর্ডে বর্ণিত একই দৃষ্টিভঙ্গিতে একাধিকবার ইনস্ট্যান্ট করা যেতে পারে । উদাহরণস্বরূপ, আপনি একবারে আইপ্যাড স্ক্রিনে এই সমস্ত ছয়টি সহজেই কল্পনা করতে পারেন। যদি আপনার কেবলমাত্র কোনও ভিউ কন্ট্রোলারের জন্য এমন একটি ভিউ নির্দিষ্ট করতে হয় যা আপনার অ্যাপ্লিকেশন জুড়ে একাধিকবার ব্যবহার করা হয় তবে এই প্রশ্নের জাইভার্ড দ্বারা সরবরাহ করা সমাধানটি আপনার পক্ষে অবশ্যই আরও ভাল সমাধান।


এটি আসলে একটি পৃথক প্রশ্নের মতো মনে হচ্ছে। তবে আমি মনে করি এটির দ্রুত উত্তর দেওয়া যায়, তাই এখানে যায়। প্রতিবার আপনি একটি নতুন বিজ্ঞপ্তি তৈরি করুন এটি একটি নতুন বিজ্ঞপ্তি তবে আপনার যদি একই নাম থাকতে পারে তাদের আলাদা করতে কিছু যুক্ত করতে চান তবে userInfoনোটিফিকেশনে সম্পত্তিটি ব্যবহার করুন@property(nonatomic,copy) NSDictionary *userInfo;
এনজোনস

28
আমি initWithCoder থেকে একটি অসীম পুনরাবৃত্তি পাই। কোন ধারনা?
অদৃশ্য

6
পুরানো থ্রেডটি পুনরুদ্ধার করার জন্য দুঃখিত, File's Ownerআপনার শ্রেণীর নামটি সেট করা হয়েছে তা নিশ্চিত করে আমার অসীম পুনরাবৃত্তি সমস্যা সমাধান করেছে।
themanatuf

20
অসীম পুনরাবৃত্তির আর একটি কারণ আপনার কাস্টম শ্রেণিতে xib এর মূল দৃষ্টিভঙ্গি নির্ধারণ করে। আপনি এটি করতে চান না, এটিকে ডিফল্ট "ইউআইভিউ" হিসাবে ছেড়ে যান
এক্সওয়াই

11
এই দৃষ্টিভঙ্গি সম্পর্কে আমার দৃষ্টি আকর্ষণ করার জন্য কেবল একটি জিনিস রয়েছে ... 2 ভিউগুলি এখন একই ক্লাসে রয়েছে তা কি কাউকে বিরক্ত করে না? অরিজিনাল ফাইলটি .H / .m ইউআইভিউ থেকে উত্তরাধিকার সূত্রে প্রথমটি হয় এবং [self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"MyCustomTimerView" owner:self options:nil] objectAtIndex:0]]; দ্বিতীয় ইউআইভিউ যুক্ত করে ... এই ধরণেরটি আমার জন্য অন্যরকম মনে হচ্ছে অন্য কেউ একইভাবে অনুভব করে না? যদি তাই হয় তবে এটি কি আপেল ডিজাইন দিয়ে তৈরি? নাকি এর সমাধান করে কেউ খুঁজে পেয়েছেন?
এসএইচ

137

দ্রুত উদাহরণ

এক্সকোড 10 এবং সুইফট 4 এর জন্য আপডেট হয়েছে

এখানে একটি বেসিক হাঁটা হয়। আমি মূলত এই ইউটিউব ভিডিও সিরিজটি দেখে অনেক কিছুই শিখেছি । পরে আমি এই নিবন্ধের উপর ভিত্তি করে আমার উত্তর আপডেট করেছি ।

কাস্টম ভিউ ফাইল যুক্ত করুন

নিম্নলিখিত দুটি ফাইল আপনার কাস্টম ভিউ তৈরি করবে:

  • লেআউটটি ধারণ করতে .xib ফাইল
  • UIViewসাবক্লাস হিসাবে। সুইফট ফাইল

এগুলি যুক্ত করার বিশদটি নীচে রয়েছে।

Xib ফাইল

আপনার প্রকল্পে একটি .xib ফাইল যুক্ত করুন (ফাইল> নতুন> ফাইল ...> ব্যবহারকারী ইন্টারফেস> দেখুন) । আমি আমার ফোন করছি ReusableCustomView.xib

আপনার কাস্টম ভিউটি থাকতে চান এমন বিন্যাসটি তৈরি করুন। উদাহরণ হিসাবে, আমি একটি UILabelএবং একটি দিয়ে একটি বিন্যাস করব UIButton। অটো লেআউটটি ব্যবহার করা ভাল ধারণা, যাতে পরে আপনি যে আকারে সেট করলেন তা বিষয়গুলি স্বয়ংক্রিয়ভাবে আকার পরিবর্তন করবে। (আমি এক্সিবি আকারের জন্য অ্যাট্রিবিউটস ইন্সপেক্টরটিতে ফ্রিফর্ম ব্যবহার করেছি যাতে আমি সিমুলেটেড মেট্রিকগুলি সামঞ্জস্য করতে পারি তবে এটি প্রয়োজনীয় নয়।)

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

সুইফট ফাইল

আপনার প্রকল্পে একটি ফাইল সুইড ফাইল যুক্ত করুন (ফাইল> নতুন> ফাইল ...> উত্স> সুইফট ফাইল) । এটি একটি সাবক্লাস UIViewএবং আমি আমার কল করছি ReusableCustomView.swift

import UIKit
class ResuableCustomView: UIView {

}

সুইফ্ট ফাইলটিকে মালিক করুন

আপনার .xib ফাইলটিতে ফিরে যান এবং নথির আউটলাইনে "ফাইলের মালিক" এ ক্লিক করুন। পরিচয় পরিদর্শকটিতে কাস্টম শ্রেণীর নাম হিসাবে আপনার .swift ফাইলের নাম লিখুন।

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

কাস্টম ভিউ কোড যুক্ত করুন

ReusableCustomView.swiftনিম্নলিখিত কোড সহ ফাইলের বিষয়বস্তুগুলি প্রতিস্থাপন করুন :

import UIKit

@IBDesignable
class ResuableCustomView: UIView {

    let nibName = "ReusableCustomView"
    var contentView:UIView?

    @IBOutlet weak var label: UILabel!

    @IBAction func buttonTap(_ sender: UIButton) {
        label.text = "Hi"
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    func commonInit() {
        guard let view = loadViewFromNib() else { return }
        view.frame = self.bounds
        self.addSubview(view)
        contentView = view
    }

    func loadViewFromNib() -> UIView? {
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: nibName, bundle: bundle)
        return nib.instantiate(withOwner: self, options: nil).first as? UIView
    }
}

আপনার .xib ফাইলের নামের জন্য বানানটি সঠিকভাবে পেতে নিশ্চিত হন।

আউটলেট এবং ক্রিয়াগুলি হুক আপ করুন

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

আপনি কাস্টম ভিউ ব্যবহার করুন

আপনার কাস্টম দর্শন এখন শেষ হয়েছে। আপনাকে যা করতে হবে তা হ'ল UIViewআপনার মূল স্টোরিবোর্ডে যেখানেই এটি চান add ReusableCustomViewআইডেন্টিটি ইন্সপেক্টরটিতে শ্রেণীর নামটি সেট করুন ।

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


31
রিসিউয়েবল কাস্টমভিউ হিসাবে Xib ভিউ ক্লাসটি সেট না করা গুরুত্বপূর্ণ, তবে এই Xib এর মালিক। অন্যথায় আপনার ত্রুটি হবে।
RealNmae

5
হ্যাঁ, ভাল অনুস্মারক। আমি জানি না যে আমি Xib এর দৃষ্টিভঙ্গিটি (বরং ফাইলের মালিককে) শ্রেণীর নামের সাথে সেট করার ফলে সৃষ্ট অসীম পুনরাবৃত্তি সমস্যাগুলি সমাধান করার চেষ্টা করে কত সময় নষ্ট করেছি।
সুরগাচ

2
@ টমক্যালমন, আমি এক্সকোড 8 এ এই প্রকল্পটি আবার চালিত করেছিলাম সুইফট 3 এবং অটো লেআউটটি আমার পক্ষে ঠিক কাজ করছিল।
সুরগাচ

6
আইবিতে ভিউ রেন্ডারিংয়ে অন্য কারও যদি সমস্যা হয় তবে আমি দেখতে পেলাম যে কৌশলটি বদলে Bundle.mainচালানো Bundle(for: ...)। স্পষ্টতই, Bundle.mainনকশাকালীন সময়ে অনুপলব্ধ।
ক্রিজিস

4
এটি আপনার আইবিডি ডিজাইনেবলের সাথে কাজ না করার কারণ আপনি বাস্তবায়ন করেন নি init(frame:)। একবার আপনি এটি যুক্ত করুন (এবং সমস্ত সূচনা কোডটি কোনও commonInit()ফাংশনে টানুন ) এটি দুর্দান্ত কাজ করে এবং আইবিতে প্রদর্শন করে। এখানে আরও তথ্য দেখুন: stackoverflow.com/questions/31265906/…
Dimitris

39

দেখুন নিয়ন্ত্রণের জন্য উত্তর, দর্শন নয় :

স্টোরিবোর্ড থেকে একটি এক্সিব লোড করার সহজ উপায় রয়েছে। বলুন যে আপনার নিয়ামকটি মাইক্লাসকন্ট্রোলার টাইপের যা উত্তরাধিকার সূত্রে প্রাপ্ত UIViewController

আপনি UIViewControllerআপনার স্টোরিবোর্ডে একটি আইবি ব্যবহার করে যুক্ত করেছেন ; ক্লাসের ধরণটি মাইক্লাসকন্ট্রোলার হিসাবে পরিবর্তন করুন। স্টোরিবোর্ডে স্বয়ংক্রিয়ভাবে যুক্ত হওয়া দৃশ্য মুছুন।

নিশ্চিত করুন যে আপনি যে XIB কল করতে চান তাকে MyClassController.xib বলা হয়।

স্টোরিবোর্ড লোড করার সময় যখন ক্লাসটি ইনস্ট্যান্ট করা হবে, তখন xib স্বয়ংক্রিয়ভাবে লোড হবে। এর কারণ হ'ল ডিফল্ট বাস্তবায়ন UIViewControllerযা ক্লাসের নাম সহ একাদশকে নাম দেয়।


1
আমি কাস্টম দর্শনগুলি সর্বদা উত্সাহিত করি, তবে স্টোরিবোর্ডে এটি লোড করার জন্য এই ছোট্ট কৌশলটি কখনও জানেনি। অনেক প্রশংসিত!
মিঃ ত্রিস্তান

38
প্রশ্ন ভিউগুলি সম্পর্কে, ভিউ কন্ট্রোলার সম্পর্কে নয়।
রিকার্ডো

স্পষ্টতার জন্য শিরোনাম যুক্ত করা হয়েছে, "দেখার জন্য কন্ট্রোলারদের জন্য উত্তর, দর্শন নয়:"
nacho4d

1
আইওএস 9.1 এ কাজ করছে বলে মনে হয় না। যদি আমি স্বতঃ-নির্মিত (ডিফল্ট) দর্শনটি সরিয়ে ফেলি তবে এটি ভিসির ভিডডিডলড থেকে ফিরে আসার পরে ক্রাশ হয়ে যায়। আমি মনে করি না XIB- এ দৃশ্যটি ডিফল্ট দৃশ্যের পরিবর্তে সংযুক্ত হয়ে গেছে।
জেফ

1
ব্যতিক্রম আমি পাচ্ছি 'Could not load NIB in bundle: 'NSBundle </Users/me/.../MyAppName.app> (loaded)' with name 'uB0-aR-WjG-view-4OA-9v-tyV''। Whacko nibName নোট করুন। আমি নিব এর জন্য সঠিক শ্রেণীর নাম ব্যবহার করছি।
জেফ

16

এটি আসলে কোনও উত্তর নয়, তবে আমি মনে করি এই পদ্ধতির ভাগ করে নেওয়া সহায়ক।

উদ্দেশ্য গ

  1. আপনার প্রকল্পে কাস্টমভিউউইথএক্সআইবি এবং কাস্টমভিউউইথজিবি.এম আমদানি করুন
  2. একই নামে কাস্টম ভিউ ফাইলগুলি তৈরি করুন (.h / .m / .xib)
  3. কাস্টমভিউবিথএক্সিব থেকে আপনার কাস্টম ক্লাসটি উত্তরাধিকারী করুন

দ্রুতগতি

  1. আপনার প্রকল্পে কাস্টমভিউউইথএক্সিব.এসইউফ্ট আমদানি করুন
  2. একই নামের (.swift এবং .xib) দিয়ে কাস্টম ভিউ ফাইলগুলি তৈরি করুন
  3. কাস্টমভিউবিথএক্সিব থেকে আপনার কাস্টম ক্লাসটি উত্তরাধিকারী করুন

Ptionচ্ছিক:

  1. আপনার এক্সিব ফাইলটিতে যান, কিছু উপাদান সংযোগ করতে চাইলে আপনার কাস্টম শ্রেণীর নামের সাথে মালিককে সেট করুন (আরও তথ্যের জন্য অংশটি দেখুন সুইফট ফাইলটিকে @ সুরগ জবাবের মালিক করুন)

সব কিছুই, এখন আপনি আপনার স্টোরিবোর্ডে আপনার কাস্টম ভিউ যুক্ত করতে পারেন এবং এটি প্রদর্শিত হবে :)

কাস্টমভিউউইথএক্সিব :

 #import <UIKit/UIKit.h>

/**
 *  All classes inherit from CustomViewWithXib should have the same xib file name and class name (.h and .m)
 MyCustomView.h
 MyCustomView.m
 MyCustomView.xib
 */

// This allows seeing how your custom views will appear without building and running your app after each change.
IB_DESIGNABLE
@interface CustomViewWithXib : UIView

@end

কাস্টমভিউউইথএক্সিব.এম :

#import "CustomViewWithXib.h"

@implementation CustomViewWithXib

#pragma mark - init methods

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        // load view frame XIB
        [self commonSetup];
    }
    return self;
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        // load view frame XIB
        [self commonSetup];
    }
    return self;
}

#pragma mark - setup view

- (UIView *)loadViewFromNib {
    NSBundle *bundle = [NSBundle bundleForClass:[self class]];

    //  An exception will be thrown if the xib file with this class name not found,
    UIView *view = [[bundle loadNibNamed:NSStringFromClass([self class])  owner:self options:nil] firstObject];
    return view;
}

- (void)commonSetup {
    UIView *nibView = [self loadViewFromNib];
    nibView.frame = self.bounds;
    // the autoresizingMask will be converted to constraints, the frame will match the parent view frame
    nibView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    // Adding nibView on the top of our view
    [self addSubview:nibView];
}

@end

কাস্টমভিউউইথএক্সিব.সুইফ্ট :

import UIKit

@IBDesignable
class CustomViewWithXib: UIView {

    // MARK: init methods
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        commonSetup()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)

        commonSetup()
    }

    // MARK: setup view 

    private func loadViewFromNib() -> UIView {
        let viewBundle = NSBundle(forClass: self.dynamicType)
        //  An exception will be thrown if the xib file with this class name not found,
        let view = viewBundle.loadNibNamed(String(self.dynamicType), owner: self, options: nil)[0]
        return view as! UIView
    }

    private func commonSetup() {
        let nibView = loadViewFromNib()
        nibView.frame = bounds
        // the autoresizingMask will be converted to constraints, the frame will match the parent view frame
        nibView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        // Adding nibView on the top of our view
        addSubview(nibView)
    }
}

আপনি এখানে কিছু উদাহরণ পেতে পারেন ।

আশা করি এইটি কাজ করবে.


সুতরাং আমরা কীভাবে ইউকন্ট্রোল দর্শনগুলির জন্য আইবলেটটি যুক্ত করতে পারি
অ্যাগ্রি

1
আরে @AmrAngry, আপনার 4 টি পদক্ষেপটি করা উচিত ভিউগুলি সংযোগ করতে: "ফাইলের মালিক" এ আপনার ক্লাস সেট করে আপনার xib ফাইলটিতে যান এবং "ctrl" স্পর্শে আলতো চাপ দিয়ে আপনার ভিউগুলি ইন্টারফেসে টানুন এবং ফেলে দিন, আমি আপডেটটি করছি এই উদাহরণ সহ কোড উত্স, আপনার যদি কোনও প্রশ্ন থাকে তবে দ্বিধা করবেন না, আশা করি এটি সহায়তা করে
হামজাঘাজাউনি

আপনার রিপ্লেটির জন্য অনেক ধন্যবাদ, আমি ইতিমধ্যে এটি করেছি তবে আমি অনুমান করি আমার সমস্যাটি এই অংশে নেই। আমার সমস্যা হ'ল আমি একটি ইউআইডিটপিআকার যুক্ত করছি এবং ভিউকন্ট্রোলার থেকে সেটআপ করার জন্য এই কন্ট্রোলের জন্য একটি লক্ষ্য ক্রিয়া যুক্ত করার চেষ্টা করব এবং ইউআইকন্ট্রোলার ইভেন্টটির মান পরিবর্তিত হবে, তবে পদ্ধতিটি কখনই / ফায়ার বলা হয় না
Amr Angry

1
@ আম্র্যাংগ্রি আমি পিকার ভিউ যুক্ত করে উদাহরণটি আপডেট করছি, এটি আপনাকে সাহায্য করবে :) github.com/HamzaGhazouani/Stackoverflow/tree/master/…
হামজাঘাজাউনি

1
আপনাকে ধন্যবাদ আমি দীর্ঘদিন ধরে এটি খুঁজছিলাম।
MH175
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.