سؤال

هل يمكن لأي شخص أن يخبرني كيف يمكنني الحصول على cell indexpath؟ كنت أقوم بحفظ الفهرس في TableView: CellForrowatIndexPath: الطريقة ولكن هذا يتم تحميله فقط عندما يتم عرض الخلية وأحتاج إلى معرفة مسار الفهرس على طريقة ViewDidload. أدى ذلك إلى قيمة فارغة لأنه كما قلت ، لا يتم تحميل قيمته إلا بعد مشاهدة الخلية مرة واحدة.

شكرًا لك.

تعديل

القصد من ذلك هو القدرة على القفز إلى خلية معينة لها عدد محدد ولكنها ليست خطيًا مع عدد الأقسام والصفوف.

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

المحلول

استخدم الطريقة IndexPathforCell: على TableView ، إعطاء مؤشر إلى UITableViewCell إنها تُرجع INDEXPATH.

يمكنك وضع scrollToRowAtIndexPath:atScrollPosition:animated: في ال viewWillAppear الطريقة إذا لم يتم إعدادها بعد viewDidLoad. هذا مكان أفضل على أي حال إذا كان يمكن أن يظهر العرض أكثر من مرة بعد تحميله ، مثل عندما تستقيل وحدة التحكم في العرض الوسائط.

نصائح أخرى

أ UITableViewCell ليس لديه NSIndexPath منشأه. ال UITableViewDataSource يحدد المندوب الطرق التي تطلب خلية لخلية معينة NSIndexPath, ، لكن هذا لا يعني أن الخلية لها أي علاقة دائمة بـ NSIndexPath منشأه.

ربما من شأنه أن يساعد إذا شرحت المزيد مما أردت هذا العقار؟ ماذا تريد أن تفعل مع موقع الخلية في viewDidLoad?

جرب هذه..

    NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:EventlistTable_obj];
NSIndexPath *indexPath = [EventlistTable_obj indexPathForRowAtPoint: currentTouchPosition];
 NSLog(@"Selected  row:%d in section:%d",indexPath.row,indexPath.section);

هل تتصل مثل هذا:

[cell.fourth_image_button addTarget:self action:@selector(Btn_pressed:event:) forControlEvents:UIControlEventTouchUpInside];

يبدو لي وكأنك أجبت على سؤالك الخاص: لا يمكنك ذلك. نظرًا لأن الخلية لا تحتوي على indexPath عند تنفيذ ViewDidload. وفي الواقع ، لا يوجد في وقت لاحق أيضًا ، لأنه يمكن إعادة استخدام الخلية نفسها لتكون في فهرس آخر في عُشر ثانية ، إذا كنت تستخدم خلايا الخلايا (كلمة لطيفة!) ، والتي يجب عليك.

تحرير: حسنًا ، أعتقد أنني أرى ما تريد: أنت تقوم بحفظ IndexPath بنفسك في مكان ما عندما تقوم بتسليم الخلية إلى TableView. ملاحظة: إذا لم تقم بذلك ، فلا توجد طريقة يمكنك من خلالها معرفة أي خلية معينة ، على الأقل ليس إذا كنت تفعل الأشياء بالطريقة التي يجب عليك بها.

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

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

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