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