我有一个UICollectionView,其中填充了CoreData的内容。当视图加载时,我想预先选择/突出显示一些单元格。
我已经能够使用下面的代码预先选择项目了。突出显示并不像我想的那样无缝地工作,但我可以使它工作。
- (void)preSelect {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:6 inSection:5];
[self.collectionView selectItemAtIndexPath:indexPath animated:YES scrollPosition:UICollectionViewScrollPositionNone];
if ([[self.collectionView cellForItemAtIndexPath:indexPath] isSelected]) {
[self.collectionView cellForItemAtIndexPath:indexPath].backgroundColor = [UIColor darkGrayColor];
NSLog(@"selected count %i",[self.collectionView indexPathsForSelectedItems].count);
}
}
我不想让预选硬编码。我想做点什么:
NSIndexPath = indexPath where [value of cell] isEqual:@"NSString";
或更好
PFQuery *query = [PFQuery queryWithClassName:@"myClass"];
[query findObjectsInBackgroundWithBlock:^(NSArray *object, NSError *error){ NSString *abc = [object valueForKey:@"myKey"];
NSIndexPath = indexPath where cell.text = abc;
答案 0 :(得分:0)
如果以这种方式使用cellForItemAtIndexPath,那么您的代码将被致命地破坏。
单元格仅存在于屏幕上的项目中,当您滚动并且项目从屏幕上移除或显示在屏幕上时,单元格将重新用于新项目。
如果索引路径不在屏幕上,则UIView方法cellForItemAtIndexPath返回nil。如果您更改单元格的背景颜色,则它会保留其他项目在屏幕上移动时的背景颜色,重复使用您刚刚设置的背景颜色的单元格。调试它时很有趣。
修改单元格的位置在UIViewController方法cellForItemAtIndexPath的实现中。