أصبح المستجيب الأول:قم بالتمرير تلقائيًا إلى UIControl الذي يصبح المستجيب الأول

StackOverflow https://stackoverflow.com/questions/5042895

سؤال

لدي مجموعة UITableViewController مع قسم واحد والعديد من الصفوف.كل cell يتكون من عنصرين:أ UILabel مع الوصف و UITextField لإدخال.أود أن أقول شكلاً.

يوجد في الأسفل زر "التالي" للانتقال إلى العرض التالي.ولكن قبل ذلك، أنا التحقق من صحة UITextField'س:إذا لم يملأ المستخدم حقلاً، فيجب أن يتم التركيز على هذا الحقل، بحيث يرى المستخدم أنه بحاجة إلى إدخال شيء ما.حاولت مع هذا:

[inputField becomeFirstResponder];

تذكر أن الزر الذي ضغطت عليه هو في الأسفل من وجهة نظري وأتصور أن UITextField يكون بالقمة.في هذه الحالة، لا يحصل الحقل على التركيز لأنه بعيد جدًا.الآن عندما أقوم بالتمرير لأعلى ببطء ويصبح الحقل مرئيًا، يصبح الحقل هو المستجيب الأول ويحصل على المؤشر :-) الخلاصة:ال becomeFirstResponder عملت، ولكن لا تفعل بالضبط ما أردت.لا أريد التمرير لأعلى بإصبعي، يجب أن يتم التركيز على الحقل ويكون مرئيًا تلقائيًا.

هل هناك أي طريقة "للقفز" مباشرة إلى مجالي؟استخدام بديل ل becomeFirstResponder؟هل تريد التمرير إلى الحقل الخاص بي تلقائيًا؟

شكرا لمساعدتك!

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

المحلول

إذا كنت تعرف فهرس الخلية التي تحتوي على UITextField الذي تريد تحريره، فاستخدمه



NSIndexPath* indexPath = [[NSIndexPath indexPathWithIndex:your_section_index] indexPathByAddingIndex:your_cell_index];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]

قبل الاتصال becomeFirstResponder.

إذا كانت الخلية خارج الشاشة، فقد يفشل تطبيق أصبحFirstResponder في بعض إصدارات iOS.بالإضافة إلى ذلك، ستقوم بعض الإصدارات بإجراء تمرير إضافي على عرض الطاولة في بعض المواقف (على سبيل المثال.إذا حدد رمز Apple أن المستجيب سيظل خارج الشاشة دون مزيد من التمرير).للتغلب على هذه المشكلات، قد تحتاج إلى الاتصال بالمستجيب الأول بعد اكتمال الرسوم المتحركة للتمرير.

نصائح أخرى

لدي نفس المشكلة. ويرجع ذلك إلى حدوث UAnimation للمهمتين في وقت واحد.لذا، بينما يتجاهل UAnimation الخاص بـscrollToRowAtIndexPath يصبحFirstResponder .

قد يكون الحل تعطيل تأثير الرسوم المتحركة واحد منه أو آخر باستخدام performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:1.0f];.

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