У меня возникла проблема с UIcollectionView, и я думаю, что работа вокруг является тем, что в настоящее время вызывает проблему.Невозможно удалить ячейку UICollectionView после ее перезагрузки
Итак, у меня есть коллекция, которая загружает объекты из класса, которые обновляются очень часто, может быть, каждые несколько секунд.
Первая проблема, с которой я столкнулся; заключалось в том, что, когда я выбрал ячейку и выделил ее, подсветка еще одной ячейки ниже в виде коллекции. Мое решение состояло в том, чтобы создать массив выделенных элементов и запустить цикл через новый массив, чтобы решить, что выделить.
Проблема возникает при перегрузке коллекции. Ячейки продолжают оставаться выделенными и отображаться как выбранные, но они не меняют регистраций, поэтому я не могу отменить выбор.
- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection: (NSInteger)section
{
return [self.deviceList count];
}
- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView
{
return 1;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
DeviceCollectionViewCell *cell = [self.deviceCollectionView dequeueReusableCellWithReuseIdentifier:@"DeviceCell" forIndexPath:indexPath];
if([self.deviceList count] > indexPath.row)
{
cell.device = [self.deviceList objectAtIndex:indexPath.row];
}
if ([[self.deviceCollectionView indexPathsForSelectedItems] containsObject:indexPath]) {
NSLog(@"does it ever?");
// cell.backgroundColor = [UIColor blueColor];
}
for (TDDeviceParser *device in self.selectedDevices)
{
if ([cell.device.deviceTextRecord.serialNumber isEqualToString:device.deviceTextRecord.serialNumber])
{
[cell setSelected:YES];
break;
}
else
{
[cell setSelected:NO];
}
}
return cell;
}
- (UICollectionReusableView *)collectionView: (UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
UICollectionReusableView *reusableview = nil;
if (kind == UICollectionElementKindSectionHeader) {
TitleHeaderForDeviceCollectionView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView" forIndexPath:indexPath];
reusableview = headerView;
}
else if (kind == UICollectionElementKindSectionFooter) {
LogoFooterForDeviceCollectionView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"FooterView" forIndexPath:indexPath];
reusableview = footerView;
}
return reusableview;
}
#pragma mark - UICollectionViewDelegate
- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
//Iphone Five and Older Ipads: Max2
int maxCount = 2;
//ipad 4
if ([[UIDeviceHardwareVersion platform] isEqualToString:@"iPad3,4"] || [[UIDeviceHardwareVersion platform] isEqualToString:@"iPad3,5"] || [[UIDeviceHardwareVersion platform] isEqualToString:@"iPad3,6"])
{
maxCount = 4;
}
//Ipod5th,Iphone4 & Iphone4s; Don't select, just play.
else if ([[UIDeviceHardwareVersion platform] isEqualToString:@"iPod5,1"] || [[UIDeviceHardwareVersion platform] isEqualToString:@"iPhone4,1"] || [[UIDeviceHardwareVersion platform] isEqualToString:@"iPhone3,1"] || [[UIDeviceHardwareVersion platform] isEqualToString:@"iPhone3,2"] || [[UIDeviceHardwareVersion platform] isEqualToString:@"iPhone3,3"])
{
maxCount = 0;
//Just play.
[self.selectedDevices removeAllObjects];
[self.selectedDevices addObject:[self.deviceList objectAtIndex:indexPath.row]];
[[TDDeviceManager sharedInstance] removeObserver:self];
[self performSegueWithIdentifier:@"VideoPlayer" sender:self];
}
if (self.selectedDevices.count < maxCount)
{
return YES;
}
else
{
return NO;
}
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
[self.selectedDevices addObject:[self.deviceList objectAtIndex:indexPath.row]];
[self updatePlayerImages];
NSLog(@"device Count %d",self.selectedDevices.count);
}
- (BOOL)collectionView:(UICollectionView *)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Should I Deselect?");
return YES;
}
- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%s",__PRETTY_FUNCTION__);
//What device do we remove?
for (TDDeviceParser *device in self.selectedDevices)
{
if ([device.deviceTextRecord.serialNumber isEqualToString:((TDDeviceParser*)[self.deviceList objectAtIndex:indexPath.row]).deviceTextRecord.serialNumber])
{
NSLog(@"%s Removed %@",__PRETTY_FUNCTION__, device.name);
[self.selectedDevices removeObject:device];
break;
}
}
NSLog(@"%s Update %d",__PRETTY_FUNCTION__, self.selectedDevices.count);
[self updatePlayerImages];
}
'scrollPosition:' принимает значение типа 'UICollectionViewScrollPosition', а не BOOL. 'UICollectionViewScrollPositionNone' - правильное значение для использования. – Travis
Спасибо DTDev за решение! Я столкнулся с той же проблемой. –
это спаси мой день – Pikaurd