2012-11-01 1 views
14

Ho un UICollectionViewController:Selezionare gli elementi di programmazione in 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; 
} 

Funziona. Ho questo in viewDidLoad, permettendo all'utente di scegliere più elementi:

[self.collectionView setAllowsMultipleSelection:YES]; 

Quello che voglio avere, è che la prima volta che i carichi CollectionView, alcuni oggetti vengono selezionati a livello di codice, in base alla loro objectId in CellTasteCollectionView.

Ecco come sto facendo questo:

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

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

Si chiama quando l'utente fa clic sulla voce - questo non è quello che voglio: voglio l'oggetto da selezionare automaticamente quando UICollectionView carichi.

Come posso fare?

risposta

22

penso che vi manca questo metodo dal UICollectionView Class Reference:

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

È possibile utilizzare questo metodo più volte se si vuole selezioni multiple.

+0

Grazie per il vostro aiuto. :) – Ali

+20

Ricordare che la chiamata di questo metodo a livello di codice non attiverà collectionView: didSelectItemAtIndexPath :. – Boon

1

Per il comportamento giusto chiamata di funzione 4 di fila:

// 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 non si chiama se si chiama selectItem di programmazione. Dovresti chiamare il metodo manualmente dopo di esso.

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]; 

ho usato il metodo di cui sopra in Tableview, e ha funzionato.