سؤال

أنا أكتب بعض اختبارات الوحدة ، وبسبب طبيعة هذا التطبيق بالذات ، من المهم أن أحصل على ارتفاع UI سلسلة قدر الإمكان. لذا ، فإن ما أود القيام به هو تشغيل زر الضغط برمجيًا ، كما لو كان المستخدم قد ضغط على الزر في GUI.

(نعم ، نعم - أنا يستطع فقط اتصل بـ IBAction المحدد ، ولكن مرة أخرى ، طبيعة هذا التطبيق بالذات تجعل من المهم أن أقوم بتزييف الزر الفعلي ، مثل IBAction يتم استدعاؤها من الزر ، نفسه.)

ما هي الطريقة المفضلة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

لقد أتضح أن

[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];

حصلت لي بالضبط ما أحتاجه ، في هذه الحالة.

تعديل: لا تنس القيام بذلك في الخيط الرئيسي ، للحصول على نتائج مماثلة لضغط المستخدم.


لسرعة 3:

buttonObj.sendActions(for: .touchUpInside)

نصائح أخرى

تحديث لهذه الإجابة لسويفت

buttonObj.sendActionsForControlEvents(.TouchUpInside)

تعديل: تم تحديثه لـ Swift 3

buttonObj.sendActions(for: .touchUpInside)

إذا كنت ترغب في إجراء هذا النوع من الاختبارات ، فستحب دعم أتمتة واجهة المستخدم في iOS 4. يمكنك كتابة JavaScript لمحاكاة مكابس الزر ، وما إلى ذلك. متناثر.

في هذه الحالة، 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.

سريع 3:

self.btn.sendActions(for: .touchUpInside)

ل xamarin iOS

btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);

المرجعي

سويفت 4:

الذات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top