私は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
が読み込まれたときにアイテムが自動的に選択されるようにしたいのです。
どうすればよいですか?
ICollectionView Class Reference にこのメソッドがないと思います。
- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath
animated:(BOOL)animated
scrollPosition:(UICollectionViewScrollPosition)scrollPosition
複数の選択が必要な場合は、このメソッドを複数回使用できます。
プログラムで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))
正しい動作のためには、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)
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.districtTableview selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
[self tableView:weakSelf.districtTableview didSelectRowAtIndexPath:indexPath];
上記の方法をtableviewで使用したところ、うまくいきました。