2016-01-22 34 views
1

我有一个问题,当我单击某个单元格时,没有任何反应,并且当我单击显示前一个单元格的数据的第二个单元格(或我的简历点击第一个),我认为这显示了我错了index.item(详细信息视图)单击CollectionViewCell将显示以前选择的单元格而不是当前单元格

#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 
+3

您是否尝试过使用'didSelectItemAtIndexPath'而不是'didDeselectItemAtIndexPath'!? – luk2302

回答

3

,您应该使用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]; 

} 

否则,当你首先触摸一个项目,没有任何反应因为无法取消选择。当您再点击第二个项目时,第二个项目会被选中,但第一个项目会被选中,其中de会被选中,这会调用您当前的实现。但是您实际上希望您的所有代码都在最初的选择上发生,而不是取消选择

相关问题