I have one problem, when I click on a cell, nothing happens, and when I click on a second cell that displays the data of the previous cell (or the one I clicked on first) in resumé I think it shows me the wrong index.item (in the detail 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
You should use the
didSelectItemAtIndexPath
function instead of thedidDeselectItemAtIndexPath
:Otherwise when you first touch an item, nothing happens because nothings gets deselected. When you then click a second item, the second one gets selected, but the first one gets deselected which invokes your current implementation. But you actually want all your code to happen on the initial select rather than the deselect.