gpt4 book ai didi

ios - 单击 CollectionViewCell 显示先前选择的单元格而不是当前单元格

转载 作者:行者123 更新时间:2023-12-01 18:46:51 25 4
gpt4 key购买 nike

我有一个问题,当我单击一个单元格时,什么也没有发生,当我单击第二个单元格时,它会在简历中显示前一个单元格(或我第一个单击的单元格)的数据,我认为它显示了错误的索引.item(在详细 View 中)

#define API_V3_CHANNEL_URL @"examples.json"

@interface MSContestListViewController ()

@end

@implementation MSContestListViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.

CGRect frame = CGRectMake(0.0, 0.0, self.view.frame.size.width, self.view.frame.size.height);

NSArray *colors = [[NSArray alloc] initWithObjects:
[UIColor colorWithRed:1 green:0.529 blue:0.357 alpha:1.0],
[UIColor colorWithRed:1 green:0.439 blue:0.357 alpha:1.0],
[UIColor colorWithRed:0.937 green:0.302 blue:0.357 alpha:1.0],
[UIColor colorWithRed:0.737 green:0.212 blue:0.357 alpha:1.0],
nil];

CAGradientLayer *gradient = [DREasyGradient gradientWithFrame:frame
orientation:DRHorizontalGradient
colors:colors];


[self.view.layer insertSublayer:gradient atIndex:0];


_segmentedControl.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.2];

[self fetchEntries];
[self fetchEntriesWinner];
[self fetchEntriesPhotos];

}

- (void)fetchEntries
{
NSString *searchURL = [API_V3_CHANNEL_URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSData *searchData = [NSData dataWithContentsOfURL:[NSURL URLWithString:searchURL]];
NSDictionary *searchDict =[NSJSONSerialization JSONObjectWithData:searchData options:NSJSONReadingMutableContainers error:nil];
//self.readArray = [searchDict objectForKey:@"CONTESTS"];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status == %@", @"LIVE"];
self.readArray = [[searchDict objectForKey:@"CONTESTS"] filteredArrayUsingPredicate:predicate];

NSLog(@"%@", self.readArray);

}

- (void)fetchEntriesWinner
{
NSString *searchURL = [API_V3_CHANNEL_URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSData *searchData = [NSData dataWithContentsOfURL:[NSURL URLWithString:searchURL]];
NSDictionary *searchDict =[NSJSONSerialization JSONObjectWithData:searchData options:NSJSONReadingMutableContainers error:nil];
//self.readArray = [searchDict objectForKey:@"CONTESTS"];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status == %@", @"ARCHIVED"];
self.readArrayWinner = [[searchDict objectForKey:@"CONTESTS"] filteredArrayUsingPredicate:predicate];

NSLog(@"winner array : %@", self.readArrayWinner);

}

- (void)fetchEntriesPhotos
{
NSString *searchURL = [API_V3_CHANNEL_URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSData *searchData = [NSData dataWithContentsOfURL:[NSURL URLWithString:searchURL]];
NSDictionary *searchDict =[NSJSONSerialization JSONObjectWithData:searchData options:NSJSONReadingMutableContainers error:nil];
//self.readArray = [searchDict objectForKey:@"CONTESTS"];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status == %@", @"LIVE"];
self.readArrayPhotos = [[searchDict objectForKey:@"CONTESTS"] filteredArrayUsingPredicate:predicate];

NSLog(@"%@", self.readArray);

}

- (IBAction)segmentedControlAction:(id)sender
{
switch(_segmentedControl.selectedSegmentIndex)
{
case 0:

if(self.readArray.count == 0)
{
[self fetchEntries];
} else {

[self.collectionView reloadData];
}
break;

case 1:
if(self.readArrayWinner.count == 0)
{
[self fetchEntriesWinner];
} else {
[self.collectionView reloadData];
}
break;

case 2:
if(self.readArrayPhotos.count == 0)
{
[self fetchEntriesPhotos];
} else {
[self.collectionView reloadData];
}
break;

default:
break;

}

}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{

switch (_segmentedControl.selectedSegmentIndex) {
case 0:
return [self.readArray count];
break;

case 1:
return [self.readArrayWinner count];
break;

case 2:
return [self.readArrayPhotos count];
break;

default:
break;
}

return 0;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"pictureCell";

MSContestListCollectionViewCell *cell = (MSContestListCollectionViewCell *)[self.collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];

cell.titleContest.adjustsFontSizeToFitWidth = YES;
cell.titleContest.minimumScaleFactor = 0.5;

cell.pictureImageView.layer.cornerRadius = 5;
cell.pictureImageView.clipsToBounds = YES;

cell.titleView.layer.cornerRadius = 5;
cell.titleView.clipsToBounds = YES;

switch (_segmentedControl.selectedSegmentIndex) {
case 0: {
NSDictionary *searchResult = [self.readArray objectAtIndex:indexPath.item];
NSString *stringImage = [searchResult objectForKey:@"featuredImage"];

NSString *image = [NSString stringWithFormat:@"https://srv.mediaswapp.com/%@", stringImage];
[cell.pictureImageView sd_setImageWithURL:[NSURL URLWithString:image]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

cell.titleContest.text = [searchResult objectForKey:@"description"];
cell.statusContest.text = [searchResult objectForKey:@"status"];
break;
}
case 1: {
NSDictionary *searchResult2 = [self.readArrayWinner objectAtIndex:indexPath.item];
NSString *stringImage = [searchResult2 objectForKey:@"featuredImage"];

NSString *image = [NSString stringWithFormat:@"https://srv.mediaswapp.com/%@", stringImage];
[cell.pictureImageView sd_setImageWithURL:[NSURL URLWithString:image]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

cell.titleContest.text = [searchResult2 objectForKey:@"description"];
cell.statusContest.text = [searchResult2 objectForKey:@"status"];
break;
}
case 2: {
NSDictionary *searchResult3 = [self.readArrayPhotos objectAtIndex:indexPath.item];
NSString *stringImage = [searchResult3 objectForKey:@"featuredImage"];

NSString *image = [NSString stringWithFormat:@"https://srv.mediaswapp.com/%@", stringImage];
[cell.pictureImageView sd_setImageWithURL:[NSURL URLWithString:image]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

cell.titleContest.text = [searchResult3 objectForKey:@"description"];
cell.statusContest.text = [searchResult3 objectForKey:@"status"];
break;
}

default:
break;
}

return cell;
}

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{

NSDictionary *searchResult = [self.readArray objectAtIndex:indexPath.item];
NSString *videoID = [searchResult objectForKey:@"description"];
NSString *stringImage = [searchResult objectForKey:@"featuredImage"];
NSString *image = [NSString stringWithFormat:@"https://srv.mediaswapp.com/%@", stringImage];

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main"
bundle: nil];
MSContestDetailViewController *yourController = (MSContestDetailViewController *)[mainStoryboard
instantiateViewControllerWithIdentifier:@"contestDetailViewController"];

yourController.urlImage = image;
yourController.contestName = videoID;
yourController.contestTime = [searchResult objectForKey:@"drawDate"];

[self.navigationController pushViewController:yourController animated:YES];

}


@end

最佳答案

您应该使用 didSelectItemAtIndexPath函数而不是 didDeselectItemAtIndexPath :

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

NSDictionary *searchResult = [self.readArray objectAtIndex:indexPath.item];
NSString *videoID = [searchResult objectForKey:@"description"];
NSString *stringImage = [searchResult objectForKey:@"featuredImage"];
NSString *image = [NSString stringWithFormat:@"https://srv.mediaswapp.com/%@", stringImage];

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main"
bundle: nil];
MSContestDetailViewController *yourController = (MSContestDetailViewController *)[mainStoryboard
instantiateViewControllerWithIdentifier:@"contestDetailViewController"];

yourController.urlImage = image;
yourController.contestName = videoID;
yourController.contestTime = [searchResult objectForKey:@"drawDate"];

[self.navigationController pushViewController:yourController animated:YES];

}

否则,当您第一次触摸一个项目时,什么都不会发生,因为没有任何东西被取消选择。然后,当您单击第二个项目时,会选择第二个项目,但会取消选择第一个项目,这会调用您当前的实现。但是您实际上希望所有代码都发生在初始 上。选择而不是 取消选择 .

关于ios - 单击 CollectionViewCell 显示先前选择的单元格而不是当前单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34949499/

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