2017-03-04 68 views
0

**如何選擇的CollectionView單細胞和取消選擇所有其它細胞

我已經水平的CollectionView其中選擇的單元有橙色 漸變顏色和所有其他取消細胞灰色IM 僅使用didselect委託方法但我正在逐漸 多個單元格的選擇問題,我有表 視圖與同一個概念的問題,同時滾動和我尋覓了很多,但我還沒有得到重用細胞的 正確答案

**

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


    DateTimeCell * cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"DateTimeCellID" forIndexPath:indexPath]; 



    if (self.selectedIndexPath != nil && indexPath == self.selectedIndexPath) 
    { 

     CAGradientLayer *gradient = [CAGradientLayer layer]; 
     gradient.frame = cell.mainView.bounds; 
     gradient.startPoint = CGPointZero; 

     gradient.endPoint = CGPointMake(1, 1); 
     gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:238.0/255.0 green:42.0/255.0 blue:123/255.0 alpha:1.0] CGColor],(id)[[UIColor colorWithRed:241.0/255.0 green:90.0/255.0 blue:41.0/255.0 alpha:1.0] CGColor], nil]; 
     [gradient setMasksToBounds:NO]; 
     cell.mainView.backgroundColor = [UIColor clearColor]; 
     [cell.mainView.layer insertSublayer:gradient atIndex:0]; 

     [indexPaths addObject:self.selectedIndexPath]; 

    } 
    else 
    { 
     [cell.mainView setBackgroundColor:[self colorWithHexString:@"383F4A"]]; 
     } 

    return cell; 
} 

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


    indexPaths = [NSMutableArray arrayWithObjects:indexPath, nil]; 

    if (self.selectedIndexPath) 
    { 
     // if we had a previously selected cell 

     if ([indexPath compare:self.selectedIndexPath] == NSOrderedSame) 
     { 
      // if it's the same as the one we just tapped on, then we're unselecting it 

      NSLog(@"Selected"); 

     } 
     else 
     { 
      // if it's different, then add that old one to our list of cells to reload, and 
      // save the currently selected indexPath 

      [indexPaths addObject:self.selectedIndexPath]; 
      self.selectedIndexPath = indexPath; 
     } 
    } 
    else 
    { 
     // else, we didn't have previously selected cell, so we only need to save this indexPath for future reference 

     self.selectedIndexPath = indexPath; 

    } 



    dispatch_async(dispatch_get_main_queue(), ^{ 
     [collectionView reloadItemsAtIndexPaths:indexPaths]; 
    }); 


} 
+0

您需要重新加載所有行此。 –

+0

多個單元格現在正在單擊選中。 –

+0

在重新加載後管理您所需的選定單元格。 –

回答

1

採取全球selectedIndexPath globaly像下面

NSIndexPath *selectedIndexPath = [[NSIndexPath alloc] indexPathForRow:0 inSection:0]; 

wrilte下面的代碼在委託方法

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


DateTimeCell * cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"DateTimeCellID" forIndexPath:indexPath]; 

if self.selectedIndexPath == indexPath 
{ 
    // do what you want to do with your selected cell 
} 
else 
{ 
    // do what you want to do with your deselected cell 
} 


return cell; 
} 

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

self.selectedIndexPath = indexPath 
[self.collectionView reloadData]; 


} 
+0

我在哪裏定義全局變量..?像在做select或cell爲行? –

+0

在.h文件中,你有你的collectionview的出口 –

+0

同樣的問題兄弟你試過.. ?? –

相關問題