在UICollectionView中以编程方式选择项目

时间:2012-11-01 12:35:23

标签: ios objective-c uicollectionview

我有UICollectionViewController

- (NSInteger)collectionView:(UICollectionView *)collectionView 
     numberOfItemsInSection:(NSInteger)section {
    return [self.pageTastes count];
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView  
                  cellForItemAtIndexPath:(NSIndexPath *)indexPath {
     CellTasteCollectionView *cell = 
       [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" 
                                                 forIndexPath:indexPath];
     Taste *taste = [self.pageTastes objectAtIndex:indexPath.item];       
     [[cell imageView] setImage:taste.image];
     [cell setObjectId:taste.objectId];    
     return cell;
}

有效。我在viewDidLoad中有这个,允许用户选择多个项目:

[self.collectionView setAllowsMultipleSelection:YES];

我想要的是,第一次加载CollectionView时,会根据objectId中的CellTasteCollectionView以编程方式选择某些项目。

以下是我这样做的方式:

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

    Taste *taste = [self.pageTastes objectAtIndex:indexPath.item];
    printf("%s\n", [taste.objectId UTF8String]);
}

当用户点击该项时会调用它 - 这不是我想要的:我希望在UICollectionView加载时自动选择该项。

我该怎么做?

4 个答案:

答案 0 :(得分:23)

我认为您在UICollectionView Class Reference

中缺少此方法
- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath 
                     animated:(BOOL)animated 
               scrollPosition:(UICollectionViewScrollPosition)scrollPosition

如果您想要多次选择,可以多次使用此方法。

答案 1 :(得分:3)

如果以编程方式调用didSelectItemAt,则不会调用{p> selectItem。你应该在它之后手动调用该方法。

self.collectionView.selectItem(at: IndexPath(item: 0, section: 0), animated: true, scrollPosition: .bottom)
self.collectionView(self.collectionView, didSelectItemAt: IndexPath(item: 0, section: 0))

答案 2 :(得分:1)

对于正确的行为,连续调用4函数:

// Deselect
self.collection.deselectItem(at: previousPath, animated: true)
self.collectionView(self.collection, didDeselectItemAt: previousPath)

// Select
self.collection.selectItem(at: path, animated: true, scrollPosition: .centeredVertically)
self.collectionView(self.collection, didSelectItemAt: path)

答案 3 :(得分:1)

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.districtTableview selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
[self tableView:weakSelf.districtTableview didSelectRowAtIndexPath:indexPath];

我在tableview中使用了上面的方法,并且它有效。