我有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
加载时自动选择该项。
我该怎么做?
答案 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中使用了上面的方法,并且它有效。