2016-07-20 3 views
0

Я использую collectionCell, чтобы выбрать и снять выделение с изображения на collectionCell. Но когда я нажимаю на выбранную ячейку, она не будет отменена.UICollectionView CustomCell- Невозможно отменить выбор уже выбранной ячейки

Я изменил свой код в соответствии с предложением Nirav, и он работает для текущего представления, но когда я прихожу из другого представления, передавая некоторый объект, тогда этот объект должен быть отмечен отмеченным. Если я нажмю на отмеченные объекты, которые выбраны, он не отменяет выбор ячейки.

Мой код

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 

BICollectionCell *cell = (BICollectionCell *)[self.collectionView dequeueReusableCellWithReuseIdentifier:@"BICollectionCell" forIndexPath:indexPath]; 

CustVehiclesList *objCustVehiclesList =self.array_VehicleServicesList[indexPath.row]; 
[cell.labelMake setText:objCustVehiclesList.make]; 
[cell.lblLicense setText:objCustVehiclesList.licencePlateNo]; 

if (objCustVehiclesList.vehiclePicture == nil ||[objCustVehiclesList.vehiclePicture isEqualToString:@""]) 
{ 
    [cell.imageCarsView setImage:[UIImage imageNamed:@"placeholder.png"]]; 
} 
else 
{ 
    NSString *baseString = [NSString stringWithFormat:@"%@",objCustVehiclesList.vehiclePicture]; 
    NSData* imageData = [[NSData alloc] initWithBase64EncodedString:baseString options:0]; 
    UIImage *imageToDisplay = [UIImage imageWithData:imageData]; 
    [cell.imageCarsView setImage:imageToDisplay]; 
} 

[cell setSelected:YES]; 
[self.collectionView selectItemAtIndexPath:indexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone]; 

if (self.selectedIndexPath == indexPath) 
{ 
    [cell.imgSelectedImage setImage:[UIImage imageNamed:@"vs_tick.png"]]; 
} 
else 
{ 
    [cell.imgSelectedImage setImage:nil]; 
} 

if ([objCustVehiclesList.modelName isEqualToString:self.str_ModelName] && _isCalledFromDetailVC) 
{ 
    [cell.imgSelectedImage setImage:[UIImage imageNamed:@"vs_tick.png"]]; 
} 


if (indexPath.row == self.indexPathToBeSearch.row && self.isCalledFromVehicleVC) 
{ 
    [cell.imgSelectedImage setImage:[UIImage imageNamed:@"vs_tick.png"]]; 
} 


return cell; 
} 
+0

Заменяет ли 'BICollectionCell' setSelected:' или 'setSelected: animated:'. Если да, вызываете ли вы '[super setSelected: selected]' или '[super setSelected: selected animated: animated]' в нем? См. Http://stackoverflow.com/questions/15330844/uicollectionview-select-and-deselect-issue – Larme

+0

@ Larme Я не переопределяю ни одну вещь в ячейке биколлекции, а также тоже существует – ChenSmile

+2

Возможный дубликат [UICollectionView Включить отмену выбора ячеек, а allowMultipleSelection - отключено] (http://stackoverflow.com/questions/32423778/uicollectionview-enable-deselecting-cells-while-allowsmultipleselection-is-disab) – fishinear

ответ

3

Если вы хотите изменить изображение при выборе ячейки, и если клетка уже выбран, и вы хотите deselect его, то вы можете изменить свой код, как этот

Первая страница один экземпляр свойство selectedIndexPath как этот

@property NSIndexPath *selectedIndexPath; 

После этого измените ваш cellForItemAtIndexPath как это

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

    BICollectionCell *cell = (BICollectionCell *)[self.collectionView dequeueReusableCellWithReuseIdentifier:@"BICollectionCell" forIndexPath:indexPath]; 
    [cell setSelected:YES]; 
    [self.collectionView selectItemAtIndexPath:indexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone]; 
    if (self.selectedIndexPath == indexPath || ([objCustVehiclesList.modelName isEqualToString:self.str_ModelName] && _isCalledFromDetailVC) || (indexPath.row == self.indexPathToBeSearch.row && self.isCalledFromVehicleVC)) { 
     [cell.imgSelectedImage setImage:[UIImage imageNamed:@"vs_tick.png"]]; 
    } 
    else { 
     [cell.imgSelectedImage setImage:nil]; 
    } 
    <----Label Values---> 
    return Cell; 
} 

Сейчас в didSelectItemAtIndexPath проверки для уже selected клетки, как этот

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 
    if (self.isCalledFromVehicleVC || self.isCalledFromDetailVC) 
    { 
    self.isCalledFromVehicleVC = NO; 
    self.isCalledFromDetailVC = NO; 
    } 
    if (self.selectedIndexPath == indexPath) { 
     [collectionView deselectItemAtIndexPath:indexPath animated:YES]; 
     self.selectedIndexPath = nil; 
    } 
    else { 
     self.selectedIndexPath = indexPath; 
    }   
    [self.collectionView reloadData]; 
} 

Примечание - Удалите didDeselectItemAtIndexPath метод не существует никакой необходимости в этом сейчас.

+0

спасибо, что ваш ответ сработал – ChenSmile

+0

Приветствие, Happy Coding :) –

+0

, если я прихожу из другого представления по объекту passign и выбираю его, если объект доступен. в этом случае, если я нажимаю на выбранный объект, он не получает отмену – ChenSmile

Смежные вопросы