سؤال

أواجه مشكلة مع UITableView's didSelectRowAtIndexPath.

يتم إعداد الجدول الخاص بي بحيث عند تحديد صف ، فإنه يقوم بتهيئة وحدة تحكم عرض جديدة ودفعه.

في المرة الأولى التي أقوم فيها بالنقر فوق أي صف في الجدول ، لا يتم استدعاء الطريقة. بمجرد اختيار صف آخر ، يبدأ العمل كالمعتاد.

لقد تحققت من هذا عن طريق تعيين نقطة توقف didSelectRowAtIndexPath. عند إضافة NSLog إلى الطريقة ، أرى أنه عندما أقوم بتحديد الصف الثاني الذي يدفع أخيرًا وحدة تحكم العرض الجديدة ، أرى أن اثنين من عبارات السجل تظهر في وحدة التحكم في نفس الوقت.

أي اقتراحات؟

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

المحلول

أي فرصة لكت كتبت عن طريق الخطأ فعلتديSelectRowatIndexPath؟

نصائح أخرى

تحقق أيضًا من خاصية التحديد لعرض الجدول الخاص بك في ملف XIB. استخدم "التحديد الفردي" أو "التحديد المتعدد" كما هو مطلوب.

لقد واجهت القضية التالية:

  • أول انقر في الصف -> لا تأثير ، لا اختيار ، أبداً
  • النقر الثاني والمتابعة -> سلوك التحديد الصحيح ، دائماً

في حالتي ، كان خطأي هو التحقق Show Selection on Touch في Builder الواجهة. يمكنك فكه في IB هنا:

enter image description here

أتمنى أن يساعد ذلك شخص ما

تحقق مما إذا كنت قد حددت أي إيماءات في صفك. إزالة لفتة عملت بالنسبة لي.

لقد ناقشت حتى نشر هذه الإجابة لأنني أعتقد أن النجوم تتماشى من أجل إظهار نفسها.

لدي اختلاف في هذه المشكلة وقد فحصت الحلول الأخرى. في عرض الجدول الخاص بي ، لا يعالج الصف الأخير من طاولتي على الصنبور الأول. يسلط الضوء عليه ، ولكن didSelectRowAtIndexPath لا يتم استدعاؤه. جميع الصفوف الأخرى تعمل بشكل جيد. ولكن إذا قمت بتشغيل TableView ترتد ، فيبدو أنه يحل المشكلة (ولكن عليك التعامل مع ترتد TableView).

تم تعيين UitableViewCellseLectionStylenone للخلية التي تعرض هذه المشكلة (IOS9).

لقد انتهيت من الاتصال

[tableView deselectRowAtIndexPath:indexPath animated:NO];

أول شيء في

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

وهو ليس هو نفسه ، ولكنه جيد بما فيه الكفاية. يجعلني أتساءل أي نوع من الطاولة يجلب IOS10.

سريع 2

تأكد من أن لديك هذه المجموعة إلى صواب:

self.tableView.allowsSelection = true

ضع هذا فوق حقك بعد viewDidLoad() وقبل super.viewDidLoad()

سريع 3

إذا كنت تعمل مع Swift 3 في فصل ليس أ UITableViewController وأنت تستخدم UITableViewDelegate, ، ثم قد تحتاج إلى استخدام عنوان الطريقة:

@objc(tableView:didSelectRowAtIndexPath:) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){...}

لقد نجح هذا الأمر بالنسبة لي ، على الرغم من أنني قمت للتو بترحيل مشروعي إلى Swift 3. إنه جديد إلى حد ما ، لذا قد يتم إصلاح هذا لاحقًا.

إذا كنت قد قمت بتعيين أي UITAPESTURERECOONIZER في فصلك ، فيمكنك إضافة هذا الخط في DISSELECTROWATINDEXPATH:

[tableView deselectRowAtIndexPath:indexPath animated:NO];

هذا عمل بالنسبة لي.

تحدث هذه المشكلة أيضًا عندما تعمل مع إيماءات التعرف ضمن عرض الجدول في هذه الحالة ، فأنت لا تحتاج إلى إزالتها ، فأنت بحاجة فقط للتأكد من أن خاصية الإيماءات الخاصة بك cancelsTouchesInView = false هذه قيمة منطقية تؤثر على ما إذا كان يتم تسليم اللمسات إلى وجهة نظر عندما يتم التعرف على لفتة.

سريع 3

لم تعمل أي من الإجابات الأخرى في حالتي ، ما الذي تم إصلاحه بالنسبة لي هو:

tableView.delaysContentTouches = false

didSelectRowAt لم يتم استدعاء الوظيفة في تطبيقي في الصنبور الأول أو الثاني ... كنت أحاول حل المشكلة لا يمكن العثور على أي حل. لكن فجأة كنت أدرك ، كنت أستخدم View.Animation Change ... Delegate لم يتم استدعاء الطريقة بينما تستمر الرسوم المتحركة

في حالتي ، كان لدي رأس قسم UableView مع معرف لفتة. عند استغلال الرأس ، يجب أن يدرج عدد قليل من الصفوف في هذا القسم وتحريك الإدراج (مثل قسم التوسيع/الانهيار). لأول مرة عند توسيعها واستغلالها ، لم يتم إطلاق طريقة DeSelectRow Depigate. لمزيد من الصنابير وتوسيع/انهيار الإجراءات ، كان يعمل كما هو متوقع.

لكل إجابة ayoub nouri قمت بتعيين CancelStouchEsInview على FALSE ، وهذا حل المشكلة. TAPGESTURERECognizer؟

سريع 4.2

تعطيل "تأخير لمس" في السمات المفتش حل المشكلة.
بعد ذلك ، تكون النقرات ناعمة ودوار DeSelectrowat على الفور.

XCode attributes inspector

ما نجح بالنسبة لي هو البدء في كتابة "DeSselect ..." ثم اترك تصحيحًا تلقائيًا يملأ الباقي. على ما يبدو بعض التفاصيل من بناء الجملة الخاص بي كانت متزعزع. كما قال آخرون ، استخدم IDE !!

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