আমার কাছে বিভিন্ন উচ্চতার কক্ষগুলির সাথে একটি ইউআইটিএবলভিউ রয়েছে এবং সেগুলি কখন সম্পূর্ণরূপে দৃশ্যমান হয় বা না হয় তা আমার জানতে হবে।
এই মুহুর্তে দৃশ্যমান কক্ষগুলির তালিকার প্রতিটি কক্ষের মধ্যে আমি লুপ করছি, প্রতিবার দেখার জন্য স্ক্রোল করা থাকলে তা সম্পূর্ণরূপে দৃশ্যমান কিনা তা পরীক্ষা করে দেখছি। এটিই কি সেরা পন্থা?
আমার কোডটি এখানে:
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView {
CGPoint offset = aScrollView.contentOffset;
CGRect bounds = aScrollView.bounds;
NSArray* cells = myTableView.visibleCells;
for (MyCustomUITableViewCell* cell in cells) {
if (cell.frame.origin.y > offset.y &&
cell.frame.origin.y + cell.frame.size.height < offset.y + bounds.size.height) {
[cell notifyCompletelyVisible];
}
else {
[cell notifyNotCompletelyVisible];
}
}
}
সম্পাদনা করুন:
দয়া করে নোট করুন যে * - ( এনএসআর) দৃশ্যমান সেলগুলি দৃশ্যমান কোষগুলি প্রদান করে যা সম্পূর্ণ দৃশ্যমান এবং আংশিকভাবে দৃশ্যমান।
সম্পাদনা 2:
লনাফজিগার এবং ভাদিম ইয়েলগিন উভয়ের সমাধানের সংমিশ্রণের পরে এটিই সংশোধিত কোড :
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView {
NSArray* cells = myTableView.visibleCells;
NSArray* indexPaths = myTableView.indexPathsForVisibleRows;
NSUInteger cellCount = [cells count];
if (cellCount == 0) return;
// Check the visibility of the first cell
[self checkVisibilityOfCell:[cells objectAtIndex:0] forIndexPath:[indexPaths objectAtIndex:0]];
if (cellCount == 1) return;
// Check the visibility of the last cell
[self checkVisibilityOfCell:[cells lastObject] forIndexPath:[indexPaths lastObject]];
if (cellCount == 2) return;
// All of the rest of the cells are visible: Loop through the 2nd through n-1 cells
for (NSUInteger i = 1; i < cellCount - 1; i++)
[[cells objectAtIndex:i] notifyCellVisibleWithIsCompletelyVisible:YES];
}
- (void)checkVisibilityOfCell:(MultiQuestionTableViewCell *)cell forIndexPath:(NSIndexPath *)indexPath {
CGRect cellRect = [myTableView rectForRowAtIndexPath:indexPath];
cellRect = [myTableView convertRect:cellRect toView:myTableView.superview];
BOOL completelyVisible = CGRectContainsRect(myTableView.frame, cellRect);
[cell notifyCellVisibleWithIsCompletelyVisible:completelyVisible];
}