我有一个UICollectionView的工作样本,我可以移动一个单元[通过indexPath],但我需要一个特定的单元格[indexpath.row?]所以我移动我需要的单元格,此时单元格移动但不是纠正一个,所以 当我移动时,例如
NSIndexPath * index = [indexPaths objectAtIndex:0];
indexpath.row = 3上的单元移动,如何通过indexpath行调用单元格?
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor lightGrayColor];
CGRect frame = CGRectMake(10, 100, 300, 500);
UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
self.collectionView=[[UICollectionView alloc] initWithFrame:frame collectionViewLayout:layout];
[self.collectionView setDataSource:self];
[self.collectionView setDelegate:self];
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
[self.collectionView setBackgroundColor:[UIColor redColor]];
[self.view addSubview:self.collectionView];
UIButton *animus = [UIButton buttonWithType:UIButtonTypeRoundedRect];
animus.frame = CGRectMake(100, 20, 90, 30);
[animus setTitle:@"Animus" forState:UIControlStateNormal];
[animus addTarget:self action:@selector(animusPressed:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:animus];
}
- (void)animusPressed:(id)sender
{
NSIndexPath *index = [indexPaths objectAtIndex:0]; //en el index!
NSLog(@"moving tha cell :: %d", index.row);
__weak UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:index]; // Avoid retain cycles
CGRect frame = cell.frame;
frame.origin.y = 300;
cell.frame = frame;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
cell.backgroundColor=[UIColor greenColor];
UILabel *title = [[UILabel alloc]initWithFrame:CGRectMake(0, 10, cell.bounds.size.width, 40)];
[cell.contentView addSubview:title];
NSString *titleLbl = [NSString stringWithFormat:@"i = %d", indexPath.row];
title.text = titleLbl;
return cell;
}
所以一个单元移动,但不是我想要的那个,我需要通过indexpath.row移动一个特定的单元格,就像它在cellForRow上显示一样,
如何指定我要移动的单元格?
请注意我在index = 0上移动单元格,但indexpath.row = 2是移动的
由于
答案 0 :(得分:2)
你尝试过这样的事吗?
[NSIndexPath indexPathForItem:0 inSection:0]
答案 1 :(得分:1)
首先,在不使用数组作为数据源的情况下对UICollectionView进行任何调整将更加困难。最常见的是,您将拥有一个包含数据的数组,并且在cellForItemAtIndexPath:
方法中,您可以通过以下方式从该数组中获取特定于索引的数据:
MyData *myData = [self.arrayOfMyData objectAtIndex:indexPath.row];
这样,您可以使用与当前indexPath相关的数据填充单元格。完成后,只需更新数据阵列,然后调用:
[self.collectionView reloadData];
然后更新将在集合视图中表示。如果要为这些更改设置动画,请使用:
[self.collectionView performBatchUpdates:^{
[self.collectionView reloadData];
} completion:nil];
如果您希望通过改变其原始位置的外观来“移动”单元格,则可以管理arrayOfMyData
以在您想要为空的索引处添加指示符,以将单元格的背景设置为清除并将单元格移动到数组的末尾,然后调用reloadData。