English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
مقدمة
في التطوير اليومي، نتعامل غالبًا مع الأزرار، ولكن في بعض الأحيان نواجه مشاكل صعبة لمعالجتها، وهي أن الأزرار لا تستجيب للنقر، وفي هذه الحالة نحتاج إلى التحقق من الجوانب التالية
أسباب عدم استجابة الزر
1. تم إضافة الزر إلى عناصر الظاهرية الأمامية التي لم تفتح التفاعل، مثل UIImageView، يجب فتح تفاعل العنصر الأمامي view.userInteractionEnabled = YES
عند إعدادها إلى YES يمكن حل المشكلة
2. يتم تغطية الزر نفسه، عند النقر، لا يتم النقر على الزر نفسه، بل على طبقة View فوقه، وبالتالي لن يتم الاستجابة.
هناك طريقة لرؤية طبقات اللوحة، ويمكنك رؤية العناصر UI الحالية للوحة التشغيل الحالية بالنقر على الزر في الصندوق الأحمر، يمكنك رؤية ما إذا كانت هناك view تعيق الزر
3. إطار الزر يخترق إطار العنصر الأمامي، هذا هو السبب الأكثر شيوعاً، يجب أن يكون إطار الزر داخل إطار العنصر الأمامي للتفاعل، كما في الصورة أدناه، لا يتم الاستجابة للنقر في منطقة النقر الأحمر للزر.
ماذا تفعل إذا واجهت هذه المشكلة، استمر في القراءة
حل مشكلة الخروج من منطقة اللمس
هذا الوضع يمكن أن يحدث في الواقع، دعني أقدم لك مثالاً: ارتفاع منطقة الدردشة أقل من ارتفاع لوحة المفاتيح، بينما هو جزء فرعي من منطقة الدردشة، وعندما يظهر لوحة المفاتيح، يتحرك نافذة الإدخال للأعلى ويخترق إطار العنصر الأمامي، في هذه الحالة، عند النقر على الزر في الصندوق الأحمر لتبديل عمل لوحة المفاتيح لا يتم الاستجابة.
حل المشكلة
هناك طريقتان، ويتم تنفيذ هاتين الطريقتين كلما حدثت عملية لمس
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event; - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;
أعاد طريقة -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
هذه هي طريقة في View، والخطوات في معالجة العملية كالتالي
لذا يمكننا التعامل مع ذلك عند إرجاع nil، لأنه في هذه اللحظة، الزر خارج View الأب
//إرجاع view ليتفاعل مع الحدث - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UIView *view = [super hitTest:point withEvent:event]; if (view == nil){ //تحويل الإحداثيات CGPoint tempPoint = [self.testBtn convertPoint:point fromView:self]; //تحقق مما إذا كان النقرة في منطقة الزر if (CGRectContainsPoint(self.testBtn.bounds, tempPoint)){ //إرجاع الزر return _testBtn; } } return view; }
في هذه اللحظة، النقر على الزر خارج منطقة يمكن أن يكون له تأثير
الخلاصة
ما تم ذكره أعلاه هو حل مشكلة عدم الاستجابة للنقر في UIButton في iOS الذي قدمته لك المحرر، آمل أن يكون هذا مفيداً لك، إذا كان لديك أي استفسارات، يرجى ترك تعليق، وسأقوم بالرد عليك في أقرب وقت. شكراً جزيلاً لدعمكم لتعليمات النداء!
بيان: محتوى هذا المقال تم جمعه من الإنترنت، يملك حقوق الطبع والنشر أصحاب المشاريع، تم إدراج المحتوى من قبل مستخدمي الإنترنت بشكل تلقائي، ويملك الموقع غير حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي، ولا يتحمل الموقع أي مسؤولية قانونية مرتبطة بذلك. إذا اكتشفت أي محتوى يشتبه في انتهاك حقوق النسخ، فالرجاء إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # ب @) للإبلاغ، وقدم الدليل أدله، إذا تم التحقق من صحة المعلومات، فإن الموقع سيقوم بإزالة المحتوى المشبوه فوراً.