কীভাবে প্রোগ্রামে কোনও ইউআইবাটনে টাচ ইভেন্ট জাল করবেন?


183

আমি কয়েকটি ইউনিট পরীক্ষা লিখছি এবং, এই বিশেষ অ্যাপটির প্রকৃতির কারণে, আমি UIযতটা সম্ভব চেইনটি উপরে উঠানো গুরুত্বপূর্ণ । সুতরাং, আমি যা করতে চাই তা হল প্রোগ্রামটিমেটিকভাবে একটি বোতাম-টিপ ট্রিগার করা, যেন ব্যবহারকারীরা বোতামটিতে বোতামটি টিপেছিল GUI

(হ্যাঁ, হ্যাঁ - আমি কেবল নির্বাচককে কল করতে পারি IBActionতবে আবার, এই বিশেষ অ্যাপটির প্রকৃতিটি এটি গুরুত্বপূর্ণ করে তোলে যে আমি আসল বোতাম টিপটিকে নকল করি, যেমন IBActionনিজেই বোতাম থেকে ডাকা হয়))

এটি করার পছন্দের পদ্ধতিটি কী?


আপনি সরাসরি ব্যাখ্যা করতে পারেন যে আপনি ক্রিয়া পদ্ধতিটি সরাসরি কল করার চেয়ে বাটন টাচটি জাল করা কেন গুরুত্বপূর্ণ? আসলেই কোনও ব্যবহারিক পার্থক্য নেই।
জাসারিন

1
@ জাসারিন: আচ্ছা, কারণ এখানে একটা পার্থক্য রয়েছে! ;) আমার অ্যাপ্লিকেশনটিতে বেশ কয়েকটি বোতাম একই ক্রিয়া পদ্ধতি ব্যবহার করে এবং পদ্ধতিটি বোতামটির ট্যাগের ভিত্তিতে কীভাবে আচরণ করা যায় তা বিশ্লেষণ করে। সুতরাং ইউনিট পরীক্ষা পদ্ধতিটির মাধ্যমে একটি নির্দিষ্ট কোড-পাথ পরীক্ষা করার পাশাপাশি, (ক) এগুলি সমস্ত পরীক্ষা করা প্রয়োজন এবং (খ) বোতামগুলি সঠিকভাবে তারযুক্ত রয়েছে কিনা তাও যাচাই করে। তদ্ব্যতীত, এটি আমার ইউনিট-পরীক্ষা স্যুটটি সুন্দরভাবে বিমূর্ত করে তোলে, কারণ আমি ইউনিট পরীক্ষাগুলি যেমন পাঠ্য ফাইলে লাইন হিসাবে ইউনিট পরীক্ষার সংজ্ঞা দিতে পারি এরকম কিছু সহ: "1 + 2 = 3" যেখানে "3" প্রত্যাশিত সমাপ্তি প্রদর্শন, এবং এর আগে সমস্ত কিছু কোন বোতামটি চাপতে হবে।
অলি

ভাল আপনার ক্রিয়া পদ্ধতিতে (আইডি) প্রেরকের পরামিতি নেই? আপনি কি কেবল পদ্ধতিটি কল করতে এবং প্রেরক হিসাবে বোতামটি পাস করতে পারেননি?
জাসারিন

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

উত্তর:


459

এটা দেখা যাচ্ছে যে

[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];

এই ক্ষেত্রে আমার যা প্রয়োজন ঠিক তা পেয়েছি me

সম্পাদনা: কোনও ব্যবহারকারী-চাপের মতো ফলাফল পেতে মূল থ্রেডে এটি করতে ভুলবেন না।


সুইফ্ট 3 এর জন্য:

buttonObj.sendActions(for: .touchUpInside)


যা কল করার চেয়ে আলাদা নয়[myController myActionMethod:myButton1];
জাসারিইন

11
আপনার মন্তব্যের প্রতিক্রিয়াগুলিতে আপনার দুর্দান্ত নিয়ন্ত্রণ রয়েছে;)
ড্যান রোজনস্টার্ক

@ জাসারিন একেবারেই আলাদা, কারণ এটি সমস্ত নিবন্ধিত লক্ষ্য (শ্রোতাদের) এ স্পর্শ ইভেন্টটি প্রেরণ করবে।
htafoya

2
দুর্ভাগ্যক্রমে, এগুলির উভয়ই সর্বদা কাজ করবে না - যেমন ট্যাপের অঙ্গভঙ্গি থাকার পরিবর্তে তারা রিসিভারটি ইউআইসিএন্ট্রোল হওয়ার উপর নির্ভর করে।
সরঞ্জামদাতা

1
@ চেনলিওং, একটি কারণ যদি myActionMethod:প্রকাশ্য না হয় এবং তাই আপনি এটি সরাসরি কল করতে পারবেন না।
Iulian Onofrei

50

সুইফটের জন্য এই উত্তরের একটি আপডেট

buttonObj.sendActionsForControlEvents(.TouchUpInside)

সম্পাদনা : সুইফট 3-র জন্য আপডেট হয়েছে

buttonObj.sendActions(for: .touchUpInside)

1
আমি এটিই বলব: বাটনঅব.জেন্ডসঅ্যাকশনসফরত নিয়ন্ত্রণ নিয়ন্ত্রণ (.টুকআপপিডসাইড) আরও বেশি সুইফ্ট স্টাইল;)
সাজজন

1
আমি মনে করি না রান লুপ সমর্থন ব্যতীত এক্সটিসিটিস্টেজে বোতামটি তৈরি করা হলে এটি কাজ করবে।
কপারক্যাশ

6

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


1
হ্যাঁ, এটি দুর্দান্ত জিনিস, তবে আমি এটি অ্যাপ্লিকেশন থেকে করার চেষ্টা করছি, ইন্সট্রুমেন্টের মাধ্যমে নয় (যদি এটিই আপনার পদ্ধতিটি বোঝায়))
অলি ২

ইনস্ট্রুমেন্টগুলি আপনার অ্যাপ্লিকেশন দিয়ে চলে। অ্যাপ্লিকেশনটি এখনও চলছে, ইনস্ট্রুমেন্টস কেবল স্পর্শকারীকে সিমুলেট করে।
জেফ কেলি

6
আমি ইন্সট্রুমেন্টস, জেফ বুঝতে পারি - আমি যা বলছি তা হচ্ছে: আমি চাই আমার ইউনিট-টেস্টগুলি আমার পকেটে ডিভাইসে চালানো হোক, কোনও ল্যাপটপ বা এক্সকোড বা যন্ত্রপাতি ব্যবহারযোগ্য না hand বা আপনি কি ডিভাইসে যন্ত্র চালনার গোপনীয়তা জানেন? ;)
অলি

5

এই ক্ষেত্রে, UIButtonথেকে প্রাপ্ত UIControl। এটি থেকে প্রাপ্ত বস্তুর জন্য কাজ করেUIControl

আমি UIBarButtonItemনির্দিষ্ট ব্যবহারের ক্ষেত্রে " " ক্রিয়াটি পুনরায় ব্যবহার করতে চেয়েছিলাম । এখানে, UIBarButtonItemপদ্ধতি প্রস্তাব নাsendActionsForControlEvents:

তবে ভাগ্যক্রমে, UIBarButtonItemলক্ষ্য এবং কর্মের জন্য বৈশিষ্ট্য রয়েছে।

 if(notHappy){        
         SEL exit = self.navigationItem.rightBarButtonItem.action;
         id  world = self.navigationItem.rightBarButtonItem.target;
         [world performSelector:exit];
 }

এখানে, rightBarButtonItemটাইপ হয় UIBarButtonItem


আপনি যদি ইউআইবারবারটন আইটেম ব্যবহার করেন তবে আপনি কেবল [স্ব-ডুঅ্যাকশন: self.navicationItem.rightBarButtonItem] করতে পারেন; // - doAction: হ'ল স্ব.প্যাভিগেশন আইটেম right সার্টিবারবারটন আইটেমের টগল অ্যাকশন নাম।
c0ming


5

সুইফট 3:

self.btn.sendActions(for: .touchUpInside)

3
এটি কেবলমাত্র উচ্চতর উত্তরগুলি পুনরাবৃত্তি করছে।
পাং

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