2012-11-01 159 views
14

我有一個UICollectionViewController選擇項目以編程方式UICollectionView

- (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負荷,某些項目編程選擇,根據他們在CellTasteCollectionViewobjectId

以下是我正在做的:

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

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

當用戶點擊該項目這就是所謂的 - 這是不是我想要的:我要當UICollectionView負載自動選擇的項目。

我該怎麼做?

回答

22

我認爲你缺少從UICollectionView Class Reference這種方法:

- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath 
        animated:(BOOL)animated 
       scrollPosition:(UICollectionViewScrollPosition)scrollPosition 

,如果你想多選您可以使用此方法多次。

+0

感謝您的幫助。 :) – Ali

+20

請注意,以編程方式調用此方法將不會觸發collectionView:didSelectItemAtIndexPath :. – Boon

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) 
1

didSelectItemAt如果你打電話selectItem編程不叫。之後應該手動調用該方法。

self.collectionView.selectItem(at: IndexPath(item: 0, section: 0), animated: true, scrollPosition: .bottom) 
self.collectionView(self.collectionView, didSelectItemAt: IndexPath(item: 0, section: 0)) 
0
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
[self.districtTableview selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop]; 
[self tableView:weakSelf.districtTableview didSelectRowAtIndexPath:indexPath]; 

我在tableview中使用上述方法,和它的工作。

相關問題