uitableview deSelectRowatIndexPath: عدم استدعاءه في الصنبور الأول
-
21-09-2019 - |
سؤال
أواجه مشكلة مع UITableView's
didSelectRowAtIndexPath
.
يتم إعداد الجدول الخاص بي بحيث عند تحديد صف ، فإنه يقوم بتهيئة وحدة تحكم عرض جديدة ودفعه.
في المرة الأولى التي أقوم فيها بالنقر فوق أي صف في الجدول ، لا يتم استدعاء الطريقة. بمجرد اختيار صف آخر ، يبدأ العمل كالمعتاد.
لقد تحققت من هذا عن طريق تعيين نقطة توقف didSelectRowAtIndexPath
. عند إضافة NSLog
إلى الطريقة ، أرى أنه عندما أقوم بتحديد الصف الثاني الذي يدفع أخيرًا وحدة تحكم العرض الجديدة ، أرى أن اثنين من عبارات السجل تظهر في وحدة التحكم في نفس الوقت.
أي اقتراحات؟
المحلول
أي فرصة لكت كتبت عن طريق الخطأ فعلتديSelectRowatIndexPath؟
نصائح أخرى
تحقق أيضًا من خاصية التحديد لعرض الجدول الخاص بك في ملف XIB. استخدم "التحديد الفردي" أو "التحديد المتعدد" كما هو مطلوب.
لقد واجهت القضية التالية:
- أول انقر في الصف -> لا تأثير ، لا اختيار ، أبداً
- النقر الثاني والمتابعة -> سلوك التحديد الصحيح ، دائماً
في حالتي ، كان خطأي هو التحقق Show Selection on Touch
في Builder الواجهة. يمكنك فكه في IB هنا:
أتمنى أن يساعد ذلك شخص ما
تحقق مما إذا كنت قد حددت أي إيماءات في صفك. إزالة لفتة عملت بالنسبة لي.
لقد ناقشت حتى نشر هذه الإجابة لأنني أعتقد أن النجوم تتماشى من أجل إظهار نفسها.
لدي اختلاف في هذه المشكلة وقد فحصت الحلول الأخرى. في عرض الجدول الخاص بي ، لا يعالج الصف الأخير من طاولتي على الصنبور الأول. يسلط الضوء عليه ، ولكن 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؟
ما نجح بالنسبة لي هو البدء في كتابة "DeSselect ..." ثم اترك تصحيحًا تلقائيًا يملأ الباقي. على ما يبدو بعض التفاصيل من بناء الجملة الخاص بي كانت متزعزع. كما قال آخرون ، استخدم IDE !!