gpt4 book ai didi

ios - 带有分页的 UICollectionView,每个单元格覆盖整个屏幕,拖动时发出但尚未转到下一个或上一个单元格

转载 作者:行者123 更新时间:2023-12-01 17:52:36 24 4
gpt4 key购买 nike

我在启用分页时遇到 UICollectionView 问题。每个单元格将覆盖整个屏幕,因此一次只能看到 1 个单元格
在主视图中我有 UICollectionView,当用户滑动到其他单元格时,导航标题将根据新单元格更改,这在用户正确滑动时完美运行,这意味着当滑动时,UICollectionView 将整个新单元格推送到屏幕
但是,当用户轻扫一下以显示下一个单元格,然后移回当前显示的单元格时,导航标题会更改,但内容仍然是当前的
有谁知道如何解决这个问题?
我在这里附上图片以供说明

非常感谢你

这是我的代码:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
SingleLabViewCollectionScrollCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:collectionCellID forIndexPath:indexPath];
if (cell == nil){
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SingleLabViewCollectionScrollCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}

// hide
[cell.viewMain2 setHidden:YES];
[cell.viewMain3 setHidden:YES];
[cell.viewBubble2 setHidden:YES];
[cell.viewBubble3 setHidden:YES];

// set text view
[cell.lblLabText setFont:FONT_AVANT_BOOK(cell.lblLabText.font.pointSize)];
[cell.textview setScrollEnabled:YES];
[cell.textview setUserInteractionEnabled:YES];

NSDictionary *thisDict = [dictLabContentPlist valueForKey:self.titleName];
if(thisDict != nil){
NSDictionary *thisDictContent = [thisDict objectForKey:@"Text"];
NSString *content = [thisDictContent valueForKey:@"Content"];
NSAttributedString *ctAttri = [self attributedMessageFromMessage:content];
UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(messageTapped:)];
[cell.textview addGestureRecognizer:gesture];
cell.textview.attributedText = ctAttri;
cell.lblLabText.text = [thisDictContent valueForKey:@"Title"];
}

// expand textview according to text
[cell.textview sizeToFit];
[cell.textview layoutIfNeeded];
cell.textview.backgroundColor = [UIColor clearColor];

CGRect rect = cell.viewDescription.frame;
rect.size.height = cell.textview.contentSize.height + 40;
cell.viewDescription.frame = rect;
[cell.viewMain.layer setCornerRadius:5];
[cell.viewMain2.layer setCornerRadius:5];
[cell.viewMain3.layer setCornerRadius:5];
[cell.viewDescription.layer setCornerRadius:5];

// set scrollview contentsize
rect.size.height += 400;
cell.cellScrollView.contentSize = rect.size;
[cell.cellScrollView setScrollEnabled:YES];
[cell.cellScrollView scrollsToTop];

// set bubble view
[cell.btnSeeMore addTarget:self action:@selector(expand:) forControlEvents:UIControlEventTouchUpInside];

// get data for this testID
for(int i = 0; i < self.arrayTestIDs.count; i++){
if([self.arrayTestIDs[i] isEqualToString:currentID]){
currentIndex = i;
break;
}
}

// load 1st time
if(firstTimeOpenThisView){
cell.lblTestName.text = self.arrayTestNames[currentIndex];
self.titleName = self.arrayTestNames[currentIndex];
currentID = self.arrayTestIDs[currentIndex];
}else{
currentIndex ++;
// set title name
cell.lblTestName.text = self.arrayTestNames[indexPath.row];
self.titleName = self.arrayTestNames[indexPath.row];
currentID = self.arrayTestIDs[indexPath.row];
}



NSMutableDictionary *postData = [[NSMutableDictionary alloc] init];
[postData setValue:singleton.ACCESS_TOKEN forKey:@"token"];
[postData setValue:currentID forKey:@"testId"];

// this is new block that check db when click next
NSArray *fetchObjects = [singleton loadDataFromTable:@"TestData"];
// first load data from DB
isDataExist = false;
for(NSManagedObject *item in fetchObjects){
if ([[item valueForKey:@"testID"] isEqualToString:[NSString stringWithFormat:@"%@",currentID]]) {

dataResponseDict = [item valueForKey:@"data"];
NSDictionary *commonDict = [dataResponseDict objectForKey:@"Common"];
cell.lblLeftValue.text = [commonDict valueForKey:@"min"];
cell.lblLeftLevel.text = [commonDict valueForKey:@"statusBegin"];
cell.lblUnit.text = [commonDict valueForKey:@"avg"];
cell.lblRightLevel.text = [commonDict valueForKey:@"statusEnd"];
cell.lblRightValue.text = [commonDict valueForKey:@"max"];

dataResponseArray = [dataResponseDict objectForKey:@"LabReport"];

//kenvu
NSDictionary *testDict = [dataResponseArray[0] objectForKey:@"Test"];
NSString *resultStr = [testDict valueForKey:@"result"];
if([resultStr isKindOfClass:[NSNull class]])
numberOfRows = 1;
else
numberOfRows = 2;

[self loadDataIntoCell:cell indexPath:indexPath];
isDataExist=true;

}
}

if(!isDataExist){ // even data exist, still needs to download from server for latest labs data
clvMain.hidden = YES;
[self showHud];
[ws downloadDataWithMethod:@"viewlab" requestMethod:@"POST" data:postData completionBlock:^(NSDictionary *resultDict){

NSDictionary *tmpDict = [resultDict valueForKey:WS_RESULT_DATA];
dataResponseDict = [resultDict valueForKey:WS_RESULT_DATA];
if(dataResponseDict != NULL && ![dataResponseDict isKindOfClass:[NSNull class]] && dataResponseDict.count > 0){
// remove existing data for this category id
for(NSManagedObject *item in fetchObjects){
if ([[item valueForKey:@"testID"] isEqualToString:[NSString stringWithFormat:@"%@",currentID]]) {
[singleton deleteObjectFromDB:item];
}
}
// save data to db
NSMutableDictionary *dataToSave = [[NSMutableDictionary alloc]init];
[dataToSave setObject:[NSString stringWithFormat:@"%@",currentID] forKey:@"testID"];
[dataToSave setObject:tmpDict forKey:@"data"];
[singleton saveNewData:dataToSave forTable:@"TestData"];

// only reload data if no data in DB
if(!isDataExist){
NSDictionary *commonDict = [dataResponseDict objectForKey:@"Common"];
cell.lblLeftValue.text = [commonDict valueForKey:@"min"];
cell.lblLeftLevel.text = [commonDict valueForKey:@"statusBegin"];
cell.lblUnit.text = [commonDict valueForKey:@"avg"];
cell.lblRightLevel.text = [commonDict valueForKey:@"statusEnd"];
cell.lblRightValue.text = [commonDict valueForKey:@"max"];

dataResponseArray = [dataResponseDict objectForKey:@"LabReport"];
//kenvu
NSDictionary *testDict = [dataResponseArray[0] objectForKey:@"Test"];
NSString *resultStr = [testDict valueForKey:@"result"];
if([resultStr isKindOfClass:[NSNull class]])
numberOfRows = 1;
else
numberOfRows = 2;

[self loadDataIntoCell:cell indexPath:indexPath];
}

}else{ // if data == nil, still show static info
numberOfRows = 1;
cell.lblLeftValue.text = cell.lblLeftLevel.text = cell.lblUnit.text = cell.lblRightLevel.text = cell.lblRightValue.text = @"";
[self loadDataIntoCell:cell indexPath:indexPath];
}
[self hideHud];
clvMain.hidden = NO;
}];
}


firstTimeOpenThisView = false;
return cell;
}

-(void)loadDataIntoCell:(SingleLabViewCollectionScrollCell *)cell indexPath:(NSIndexPath*)indexPath{
if(indexPath.row == self.arrayTestIDs.count - 1){
btnNext.hidden = YES;
}else{
btnNext.hidden = NO;
}
if(indexPath.row == 0){
btnPrevious.hidden = YES;
}else{
btnPrevious.hidden = NO;
}

// set navigation title
titleView.lblTestName.text = self.titleName;
[titleView.lblTestName setFont:FONT_AVANT_BOOK(cell.lblTestName.font.pointSize)];

.....
}

enter image description here

最佳答案

我找到了解决方案。
通过使用 scrollViewDidEndDecelerating,我只需在获取 UICollectionView 的 visibleCells 之前添加 0.1 秒的延迟,它总是返回正确的可见单元格

关于ios - 带有分页的 UICollectionView,每个单元格覆盖整个屏幕,拖动时发出但尚未转到下一个或上一个单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25092604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com