Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pre select/highlight UICollectionViewCell on first load of view

Tags:

Im trying to preselect the first object/UICollectionViewCell in the UICollectionView? I have tried:

self.dateCollectionView.allowsMultipleSelection=NO;  [self.dateCollectionView selectItemAtIndexPath:0 animated:YES scrollPosition:UICollectionViewScrollPositionLeft]; [self collectionView:self.dateCollectionView didSelectItemAtIndexPath:0]; [self.dateCollectionView reloadData]; 

in viewDidLoad.

Here are my UICollectionView methods;

 -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{    return self.titles.count;  }   -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{      UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];     cell.backgroundColor= [UIColor clearColor];     UILabel * dateLabel = (UILabel *)[cell viewWithTag:1];     UILabel * subText = (UILabel *)[cell viewWithTag:2];     subText.text=self.titles[indexPath.row];     subText.adjustsFontSizeToFitWidth=YES;     if (cell.selected) {         cell.backgroundColor = [UIColor blueColor]; // highlight selection     }     else     {         cell.backgroundColor = [UIColor redColor]; // Default color     }     return cell; }  -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath  {      UICollectionViewCell *datasetCell =[collectionView cellForItemAtIndexPath:indexPath];     datasetCell.backgroundColor = [UIColor blueColor]; // highlight selection }  -(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath {   UICollectionViewCell *datasetCell =[collectionView cellForItemAtIndexPath:indexPath]; datasetCell.backgroundColor = [UIColor redColor]; // Default color }  - (BOOL)collectionView:(UICollectionView *)collectionView  shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath {     return YES; }  - (BOOL)collectionView:(UICollectionView *)collectionView  shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath; {     return YES; } 
like image 636
DevC Avatar asked Apr 23 '15 14:04

DevC


2 Answers

In viewDidAppear:

NSIndexPath *indexPathForFirstRow = [NSIndexPath indexPathForRow:0 inSection:0]; [self.dateCollectionView selectItemAtIndexPath:indexPathForFirstRow animated:NO scrollPosition:UICollectionViewScrollPositionNone]; [self collectionView:self.dateCollectionView didSelectItemAtIndexPath:indexPathForFirstRow]; 
like image 104
Vlad Avatar answered Oct 02 '22 18:10

Vlad


For Swift 3.0.1 You can try this:

self.collectionView.selectItem(at: indexPath, animated: true, scrollPosition: []) 

or

self.collectionView.selectItem(at: indexPath, animated: true, scrollPosition: UICollectionViewScrollPosition(rawValue: 0)) 

For Objective-C You can try this:

self.collectionView selectItemAtIndexPath:indexPath animated:YES scrollPosition:UICollectionViewScrollPositionNone]; 

Note: You should use it in viewDidAppear

like image 21
Sour LeangChhean Avatar answered Oct 02 '22 20:10

Sour LeangChhean