البرمجة

تحديث صور الـ CollectionViewCells في Swift

للتحقق مما إذا كانت الخلية (Cell) في موضع (IndexPath) معينة مرئية على الشاشة، يمكنك استخدام الدالة indexPathsForVisibleItems لجلب مصفوفة (Array) تحتوي على جميع الـ Index Paths للخلايا المرئية حاليًا على الشاشة. ثم يمكنك التحقق مما إذا كانت الـ IndexPath الخاصة بالخلية التي تبحث عنها موجودة ضمن هذه المصفوفة أم لا. إليك كيف يمكن تعديل الدالة لتحقق ذلك:

swift
func handlePhotoDownloadCompletion(notification: NSNotification) { let userInfo: Dictionary<String, String?> = notification.userInfo as! Dictionary<String, String?> guard let id = userInfo["id"], let index = users_cities.firstIndex(where: { $0.id == id }) else { return } // Check if the cell is currently visible let indexPath = IndexPath(item: index, section: 0) if followedCollectionView.indexPathsForVisibleItems.contains(indexPath) { if let cell = followedCollectionView.cellForItem(at: indexPath) as? FeaturedCitiesCollectionViewCell { if let image = users_cities[index].image { cell.backgroundImageView.image = image } } } }

تم استخدام guard للتحقق من أن الـ ID والـ Index موجودان، وإلا سيتم الخروج من الدالة. ثم يتم إنشاء الـ IndexPath من الـ Index والقسم (Section) الخاص بالخلية. بعد ذلك، يتم التحقق مما إذا كانت هذه الـ IndexPath موجودة ضمن الخلايا المرئية حاليًا. إذا كانت الـ IndexPath موجودة، يتم تحديث الصورة كالمعتاد.

المزيد من المعلومات

بالطبع! في الشيفرة المعروضة، يتم استخدام guard للتحقق من وجود id و index في userInfo و users_cities على التوالي. إذا لم تكن الشروط متوفرة، يتم الخروج من الدالة مباشرة.

بعد ذلك، يتم إنشاء indexPath باستخدام الـ index المحسوب والقسم الأول (section 0) في الـ collectionView.

الشرط if الذي يتبع يتحقق مما إذا كانت الـ indexPath موجودة ضمن الخلايا المرئية حاليًا. إذا كانت الخلية مرئية، يتم الحصول على الخلية (cell) باستخدام cellForItem(at:) ويتم تحديث صورتها (backgroundImageView.image) إذا كانت متاحة (users_cities[index].image).

هذا التعديل يحل مشكلة الخطأ الذي كنت تواجهه، حيث لن يتم محاولة الحصول على الخلية إلا إذا كانت مرئية على الشاشة، وبالتالي لن يحدث خطأ “unexpectedly found nil” في هذه الحالة.

زر الذهاب إلى الأعلى