Как избежать выделения двух ячеек в виде таблицы? - PullRequest
0 голосов
/ 11 марта 2019

Привет, в моем приложении я использую одно представление таблицы, и каждая ячейка содержит одно представление коллекции. Когда я выбираю одну ячейку в табличном представлении, эта ячейка должна выделяться светло-серым, а предыдущая должна меняться на черную, что я делаю, как показано ниже.

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    collectionView.backgroundColor=[UIColor clearColor];

    collectionViewTagValue=collectionView.tag;
    nextFocusedIndex=indexPath;


    selectedCollectionCellTag=collectionView.tag;


                // Get previously selected collectionview tag value(Because we have many collectionvies in table)

                NSIndexPath *previousPath=[NSIndexPath indexPathForRow:self->appdelegateObject.guideSelectionTag inSection:0];

                // Get Tableview cell based on tag value - that tag value will be a tableview row number

                DetailTableViewCell *cell = (DetailTableViewCell*)[self->guideDetailsTable cellForRowAtIndexPath:previousPath];

                // Get indexpath of a selected cell in collection view

                NSIndexPath *previouslySelectedCell=[NSIndexPath indexPathForRow:self->appdelegateObject.guideSelectionIndex inSection:0];

                // Get collectionview cell based on indexpath value

                MainCollectionViewCell *previousCell = (MainCollectionViewCell*)[cell.collection cellForItemAtIndexPath:previouslySelectedCell];

                // Change celllabel background color to normal not highlight

                previousCell.cellLable.backgroundColor=[UIColor colorWithRed:0.073 green:0.073 blue:0.073 alpha:1.0];

                MainCollectionViewCell *currentCell = (MainCollectionViewCell*)[collectionView cellForItemAtIndexPath:indexPath];

                currentCell.cellLable.backgroundColor=[UIColor lightGrayColor];


}

используя приведенный выше код, иногда как предыдущие, так и текущие ячейки выделяются светло-серым цветом. Даже если я сделал это изменение в dispatch_main_queue, то же поведение я наблюдал. Может ли кто-нибудь, пожалуйста, предложить лучший подход для этой функции.

Примечание: для первого выбора ячейки я получаю collectionview.tag как -1.

Ответы [ 3 ]

0 голосов
/ 11 марта 2019
//add condition in tableView delegate in didselect or diddeSelect, check index.section..
    //for selected cell
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

         UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
// check indexPath.Section here
if (!indexPath.section) == 0{ 
         cell.contentView.backgroundColor = [UIColor yellowColor];
}

    }

    //for other cells
    -(void) tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
// check indexPath.Section here
if (!indexPath.section) == 0{ 
       cell.contentView.backgroundColor = [UIColor whiteColor];
      }
    }
// hope its works for you!
0 голосов
/ 11 марта 2019
 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let cell = tableView.cellForRow(at: indexPath)
        cell?.contentView.backgroundColor = UIColor.red
    }

    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        let cell = tableView.cellForRow(at: indexPath)
        cell?.contentView.backgroundColor = UIColor.lightGray
    }

you need to set selection Default as well

0 голосов
/ 11 марта 2019

Реализован следующий метод для решения вашей проблемы:

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {

    let yourCell = tableView.cellForRow(at: indexPath)

    yourCell?.backgroundColor = UIColor.black
}

Этот код в Swift, вам нужно преобразовать его в Objective-C.

Этот вызов метода для предыдущей ячейки, которая у вас естьвыбрано, это отмена выбора.

...