web-dev-qa-db-ja.com

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が初めて読み込まれるときに、objectIdCellTasteCollectionViewに基づいて、いくつかの項目がプログラムによって選択されることです。

これが私がこれをやっている方法です:

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

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

これは、ユーザーがアイテムをクリックしたときに呼び出されます。これは私が望むものではありません。UICollectionViewが読み込まれたときにアイテムが自動的に選択されるようにしたいのです。

どうすればよいですか?

16
Ali

ICollectionView Class Reference にこのメソッドがないと思います。

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

複数の選択が必要な場合は、このメソッドを複数回使用できます。

23
Masa

プログラムで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))
7
Baig

正しい動作のためには、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
akaDuality
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.districtTableview selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
[self tableView:weakSelf.districtTableview didSelectRowAtIndexPath:indexPath];

上記の方法をtableviewで使用したところ、うまくいきました。

1
Michael Yang