আইবিআউটলেট এবং আইবিএક્શન


159

এক্সকোড এবং ইন্টারফেস বিল্ডারে আইবিআউটলেটস এবং আইবিএ অ্যাকশন ব্যবহারের উদ্দেশ্য কী?

আমি যদি আইবিউটলেট এবং আইবিএ অ্যাকশন ব্যবহার না করি তবে তাতে কি কোনও পার্থক্য রয়েছে?


সুইফট:

@IBOutlet weak var textField: UITextField!

@IBAction func buttonPressed(_ sender: Any) { /* ... */ }

উদ্দেশ্য গ:

@property (nonatomic, weak) IBOutlet UITextField *textField;

- (IBAction)buttonPressed:(id)sender { /* ... */ }

12
সমস্ত উত্তরগুলি একই ধরণের ধারণার উল্লেখ করে .. তবে কেউ যদি ব্যাখ্যা করে না যে আপনি যদি আপনার উত্সে আইবিএक्शन / আইবিআউটলেট অন্তর্ভুক্ত না করেন তবে ইন্টারফেস বিল্ডার কেন একই কাজ করে বলে মনে হচ্ছে। আইবিএક્શન এবং আইবিআউটলেট করার জন্য অন্য কোনও কারণ রয়েছে বা এগুলি ছেড়ে দেওয়া কি ঠিক ?
bobobobo

2
নীচে মাইকেল রজার্সের উত্তর আইবিএक्शनটি বাদ দিলেও কোড কেন কাজ করে সে সম্পর্কে একটি ব্যাখ্যা জুড়ে দিয়েছে।
কৃষ্ণ

আইবিএঅ্যাকশনগুলি লক্ষ্য-ক্রিয়া ইন্টারঅ্যাকশন মেকানিজমের অংশ হিসাবে বিদ্যমান, আপনি এখানে আইবিএ ফাংশনটি কীভাবে খাপ খায় তা সম্পর্কে আপনি পড়তে পারেন : বিকাশকারী / অ্যাপ্লিকেশন / লাইব্রেরি / আইওএস / ডকুমেন্টেশন / জেনারাল / You আপনি আউটলেটগুলিতে এখানে পড়তে পারেন : বিকাশকারী / অ্যাপ্লিকেশন । com / গ্রন্থাগার / আইওএস / ডকুমেন্টেশন / জেনারেল /…
উইলিয়াম পাওয়ার

উত্তর:


208

IBActionএবং IBOutletম্যাক্রোগুলি ভেরিয়েবল এবং পদ্ধতিগুলি বোঝাতে সংজ্ঞায়িত করা হয় যা ইন্টারফেস বিল্ডারে উল্লেখ করা যেতে পারে।

IBActionসমাধান করে voidএবং IBOutletকিছুতেই সমাধান না করে তবে তারা এক্সকোড এবং ইন্টারফেস বিল্ডারকে বোঝায় যে এই ভেরিয়েবলগুলি এবং পদ্ধতিগুলি আপনার কোডের সাথে ইউআই উপাদানগুলি লিঙ্ক করতে ইন্টারফেস বিল্ডারে ব্যবহার করা যেতে পারে।

আপনি যদি মোটেই ইন্টারফেস বিল্ডার ব্যবহার করছেন না, তবে আপনার কোডগুলিতে এগুলি আপনার দরকার নেই, তবে আপনি যদি এটি ব্যবহার করতে চলেছেন তবে আপনাকে IBActionআইবিতে এবং IBOutletঅবজেক্টগুলির জন্য ব্যবহৃত পদ্ধতিগুলির জন্য নির্দিষ্ট করতে হবে যা আইবিতে ব্যবহৃত হবে।


@ জাসারিইন "আইবিতে ব্যবহৃত আইটেমগুলির জন্য আইবি এবং আইবিআউটলেট ব্যবহার করা হবে এমন পদ্ধতিগুলির জন্য আপনাকে আইবিএक्शन নির্দিষ্ট করতে হবে" " পার্থক্য কি?
সাইরিলচ্যাম্পিয়ার

3
@ গ্রন্থ পদ্ধতি এবং অবজেক্টের মধ্যে একই পার্থক্য রয়েছে। পদ্ধতিগুলির জন্য আইবিএ, বস্তুর জন্য আইবিআউটলেট।
জাসারিন

কেবল স্পষ্ট করার জন্য, যেহেতু আমার পোস্টটি সম্পাদনা করা হয়েছিল, IBOutletতাতে সমাধান হয় না id। এটি বিবেচনা করুন: IBOutlet UILabel *nameLabel;- যদি IBOutletসমাধান হয়ে যায় id, তবে সেই কোডটি পড়বে id UIlabel *namelabel;যা একটি সংকলক ত্রুটি তৈরি করে। আমি যেমনটি বলেছি, IBOutletকিছুই সমাধান করে না।
জাসারিন

38

কোনও পদ্ধতিতে পতাকাঙ্কিত করার traditionalতিহ্যগত উপায় যাতে এটি ইন্টারফেস বিল্ডারে উপস্থিত হয় এবং আপনি এটির সাথে কোনও সংযোগ টানতে পারেন, তা পদ্ধতিটি রিটার্ন টাইপ আইবিএक्शन তৈরি করা হয়েছে। তবে, আপনি যদি নিজের পদ্ধতিটিকে অকার্যকর করেন তবে পরিবর্তে (আইবিএક્શનটি শূন্য হওয়ার জন্য # সংজ্ঞায়িত করা হয়) এবং একটি (আইডি) যুক্তি সরবরাহ করে, পদ্ধতিটি এখনও দৃশ্যমান। এটি অতিরিক্ত নমনীয়তা সরবরাহ করে, আল

এর সমস্ত 3 টি ইন্টারফেস বিল্ডার থেকে দৃশ্যমান:

-(void) someMethod1:(id) sender; 
-(IBAction) someMethod2; 
-(IBAction) someMethod3:(id) sender;

বিশদগুলির জন্য অ্যাপলের ইন্টারফেস বিল্ডার ব্যবহারকারী গাইড দেখুন, বিশেষত এক্সকোড একীকরণ শিরোনামে বিভাগটি।


1
প্রস্তাবিত উপরোক্ত গাইডের এখানে একটি লিঙ্ক দেওয়া আছে: developer.apple.com/library/ios/recips/…
আগ্রাসী

32

আপনি যদি আপনার জিইউআই উপাদানগুলির জন্য ইন্টারফেস বিল্ডার (অতএব আইবি উপসর্গ) ব্যবহার করে থাকেন তবে আপনাকে আইবিআউটলেট এবং আইবিএक्शन ব্যবহার করতে হবে। আইবিতে উপাদানগুলির সাথে আপনার অ্যাপ্লিকেশনটির বৈশিষ্ট্যগুলিকে সংযুক্ত করার জন্য আইবিআউটলেট প্রয়োজন, এবং আইবিএ অ্যাকশনটি আইবিতে ক্রিয়াকলাপগুলির সাথে আপনার পদ্ধতিগুলিকে যুক্ত হতে দেয়।

উদাহরণস্বরূপ, ধরুন আপনি আইবিতে একটি বোতাম এবং লেবেল সংজ্ঞায়িত করেছেন। বোতামটি চাপ দিয়ে গতিরূপে লেবেলের মান পরিবর্তন করতে, আপনি আপনার অ্যাপ্লিকেশনটিতে অনুরূপ কোনও ক্রিয়া এবং সম্পত্তি নির্ধারণ করবেন:

UILabel IBOutlet *myLabel;
- (IBAction)pushme:(id)sender;

তারপরে আইবিতে আপনি আমার লেবেলটিকে লেবেলের সাথে সংযুক্ত করবেন এবং বোতামের সাথে পুশমি পদ্ধতিটি সংযুক্ত করবেন। আইবিতে এই সংযোগগুলির জন্য আপনার আইবিএশন এবং আইবিআউটলেট দরকার।


13
তবে আপনি যদি আইবিউটলেট লেবেলিং অন্তর্ভুক্ত না করেন তবে কেন এটি এখনও কাজ করে ..?
bobobobo

7
এই ম্যাক্রোগুলি সংকলনের সময় কিছুই করেনি, এগুলি কেবল তাই ইন্টারফেস বিল্ড অ্যাপ্লিকেশনগুলি সোর্স কোডে সেই পদ্ধতিগুলি এবং ইন্টারফেস বিল্ডার ফাইলগুলি খুঁজে পেতে পারে যাতে আপনি ইন্টারফেস বিল্ডার এবং আপনার কোডের মধ্যে টানতে পারেন, একটি সংযোগ তৈরি হয়েছে যা এটি করে না আর কোন বিষয়।
নাথান ডে

আইবিএક્શન কমপক্ষে গত দশক ধরে সম্পাদনার সময়ে কিছুই করে না। আপনি (void)ইন্টারফেস বিল্ডারে একটি পদ্ধতিও সংযুক্ত করতে পারেন ।
জে কোকো

7

ইন্টারফেস বিল্ডার আপনার উইন্ডো / দৃশ্যে আপনি যে ইন্টারফেস নিয়ন্ত্রণ ব্যবহার করছেন তাতে কী সদস্য এবং বার্তা 'ওয়্যার্ড' হতে পারে তা নির্ধারণ করতে এগুলি ব্যবহার করে।

আইবিআউটলেট এবং আইবিএક્શનটি নিখুঁতভাবে চিহ্নিতকারী হিসাবে রয়েছে যেটি ইন্টারফেস বিল্ডার যখন নকশার সময় আপনার কোডটি বিশ্লেষণ করে তখন এটি সংকলক দ্বারা উত্পন্ন কোডটিতে কোনও প্রভাব ফেলবে না looks


7

কী-মান কোডিংয়ের সময় ডায়াগ্রামের মধ্যে দৌড়ে গেলেন, ভেবেছিলেন এটি কারও সাহায্য করতে পারে। এটি আইবিআউটলেট কী তা বোঝার জন্য সহায়তা করে।

প্রবাহটি দেখে, কেউ দেখতে পেল যে আইবিআউটলেটগুলি কেবল নিব ফাইলে একটি নিয়ন্ত্রণ নামের সাথে সম্পত্তি নামের সাথে মিল আছে।

এনআইবি ফাইলটি কীভাবে লোড হয়, iOS6 এর জন্য ম্যাট-এর অনলাইন বইয়ের স্ক্রিনশট shot


এই উত্তরটি ব্যাখ্যা করে যে কেন এবং কীভাবে আইবিআউটলেটগুলি কাজ করে, কেবল তারা কী করে না
জেফারি ওপোকু-মেনসাহ

4

একটি আউটলেট কোড থেকে ইউআইয়ের লিঙ্ক। আপনি যদি কোনও UI উপাদান প্রদর্শন বা আড়াল করতে চান, আপনি যদি কোনও পাঠ্যক্ষেত্রের পাঠ্য পেতে চান বা কোনও উপাদান সক্ষম করতে বা অক্ষম করতে চান (বা অন্য একশত জিনিস) আপনাকে উত্সগুলিতে সেই অবজেক্টের একটি আউটলেট সংজ্ঞায়িত করতে হবে এবং সেই আউটলেটটি লিঙ্ক করতে হবে "ইন্টারফেস অবজেক্ট" এর মাধ্যমে ইউআই উপাদানটিতে to এর পরে আপনি আপনার কোডিংয়ের অন্যান্য ভেরিয়েবলের মতোই আউটলেটটি ব্যবহার করতে পারেন।

আইবিএક્શન - ব্যবহারকারী-ইন্টারফেস অবজেক্ট দ্বারা ট্রিগার করা একটি বিশেষ পদ্ধতি। ইন্টারফেস নির্মাতারা তাদের চিনতে পেরেছেন।

@interface Controller
{
  IBOutlet id textField; // links to TextField UI object
}

- (IBAction)doAction:(id)sender; // e.g. called when button pushed

আরও তথ্যের জন্য দয়া করে অ্যাপল ডক্স পড়ুন


আহ, না, এটি আইবিআউটলেট কী তা নয়। আপনি এই ধারণাটি কোথায় পেয়েছেন?
রিচার্ড জে। রস তৃতীয়

3

আইবিএક્શન এবং আইবিআউটলেটগুলি আপনার কন্ট্রোলারের সাহায্যে ইন্টারফেস বিল্ডারে তৈরি করা আপনার ইন্টারফেসটি হুক আপ করতে ব্যবহৃত হয়। আপনি যদি ইন্টারফেস বিল্ডার ব্যবহার না করে এবং কোডে আপনার ইন্টারফেসটি পুরোপুরি তৈরি না করে থাকেন তবে আপনি সেগুলি ব্যবহার না করেই কোনও প্রোগ্রাম তৈরি করতে পারেন। তবে বাস্তবে আমাদের বেশিরভাগই ইন্টারফেস বিল্ডার ব্যবহার করেন, একবার আপনি যদি আপনার ইন্টারফেসে কিছু ইন্টারেক্টিভিটি পেতে চান, আপনাকে আইবিএ ক্রিয়াকলাপ এবং আইবিআউটলেটগুলি ব্যবহার করতে হবে।


2

IBOutlet

  • এটি একটি সম্পত্তি
  • যখন নিব (আইবি) ফাইলটি লোড করা হয়, এটি এনক্যাপসুলেটেড ডেটার অংশ হয়ে যায় যা একটি উদাহরণ ভেরিয়েবলের সাথে সংযোগ স্থাপন করে।
  • প্রতিটি সংযোগ সংরক্ষণাগারভুক্ত এবং পুনরায় প্রতিষ্ঠিত।

IBAction

  • বৈশিষ্ট্য নির্দেশ করে যে পদ্ধতিটি এমন একটি ক্রিয়া যা আপনি ইন্টারফেস বিল্ডারে আপনার স্টোরিবোর্ড থেকে সংযোগ করতে পারেন।

@ - গতিশীল প্যাটার্ন আইবি - ইন্টারফেস নির্মাতা


2

এই প্রশ্নের শীর্ষ মন্তব্যগুলির মধ্যে একটি বিশেষভাবে জিজ্ঞাসা করে:

সমস্ত উত্তরগুলি একই ধরণের ধারণার উল্লেখ করে .. তবে কেউ যদি ব্যাখ্যা করে না যে আপনি যদি আপনার উত্সে আইবিএक्शन / আইবিআউটলেট অন্তর্ভুক্ত না করেন তবে ইন্টারফেস বিল্ডার কেন একই কাজ করে বলে মনে হচ্ছে। আইবিএક્શન এবং আইবিআউটলেট করার জন্য অন্য কোনও কারণ রয়েছে বা এগুলি ছেড়ে দেওয়া কি ঠিক?


এই প্রশ্নের উত্তরের এনএসএইচপিস্টার উত্তর দিয়েছেন:

IBAction

https://nshipster.com/ibaction-iboutlet-iboutletcollection/#ibaction

2004 এর প্রথম দিকে (এবং সম্ভবত এর আগে), ইন্টারফেস বিল্ডারের দ্বারা কোনও পদ্ধতির নজরে আসার জন্য আইবিএક્શન আর প্রয়োজন ছিল না । স্বাক্ষর সহ যে কোনও পদ্ধতি -(void){name}:(id)senderআউটলেট ফলকে দৃশ্যমান হবে।

তবুও, অনেক বিকাশকারী এখনও কোনও পদ্ধতি দ্বারা কোনও ক্রিয়া দ্বারা সংযুক্ত রয়েছে তা বোঝাতে পদ্ধতি ঘোষণায় আইবিএક્શન রিটার্ন টাইপ ব্যবহার করা দরকারী বলে মনে করেন। এমনকি স্টোরিবোর্ড / এক্সআইবি ব্যবহার না করে এমন প্রকল্পগুলিও লক্ষ্য / কর্মের পদ্ধতিগুলি কল করার জন্য আইবিএક્શન নিয়োগ করতে পছন্দ করতে পারে।

IBOutlet:

https://nshipster.com/ibaction-iboutlet-iboutletcollection/#iboutlet

আইবিএ ક્શન ের বিপরীতে, স্টোরিবোর্ড বা এক্সআইবি-তে আইটেম সহ কোডে বৈশিষ্ট্যগুলি হুক করার জন্য আইবিআউটলেট এখনও প্রয়োজন

একটি আইবিআউটলেট সংযোগটি সাধারণত একটি ভিউ বা নিয়ন্ত্রণ এবং এর পরিচালনা ভিউ কন্ট্রোলারের মধ্যে প্রতিষ্ঠিত হয় (এটি প্রায়শই কোনও আইবিএ ক্রিয়াকলাপ ছাড়াও করা হয় যা কোনও ভিউ কন্ট্রোলার কোনও প্রতিক্রিয়াশীলকে সম্পাদন করতে লক্ষ্য করা যেতে পারে)। তবে একটি আইবিআউটলেট কোনও শীর্ষ-স্তরের সম্পত্তি যেমন অন্য নিয়ামক বা এমন কোনও সম্পত্তি যা রেফারেন্সিং ভিউ নিয়ন্ত্রক দ্বারা অ্যাক্সেস করতে পারে তার মতো প্রকাশ করতেও ব্যবহার করা যেতে পারে।


1

আপনি যখন ইন্টারফেস বিল্ডার ব্যবহার করেন, আপনি ইভেন্ট হ্যান্ডলারের সাথে ইভেন্টগুলি সেট আপ করতে সংযোগ পরিদর্শক ব্যবহার করতে পারেন, ইভেন্ট হ্যান্ডলারগুলি আইবিএक्शन মডিফায়ারযুক্ত ফাংশন বলে মনে করছেন। একই ধরণের রেফারেন্সের সাথে এবং আইবিআউটলেট মডিফায়ারের সাথে একটি ভিউ যুক্ত করা যেতে পারে।

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