如何避免在表格视图中突出显示两个单元格?

Posted

技术标签:

【中文标题】如何避免在表格视图中突出显示两个单元格?【英文标题】:How to avoid getting highlighted two cells in a tableview? 【发布时间】:2019-03-11 06:19:26 【问题描述】:

您好,在我的应用程序中,我正在使用一个表格视图,每个单元格包含一个集合视图。当我在表格视图中选择一个单元格时,该单元格应以浅灰色突出显示,而前一个应更改为黑色,我正在执行如下操作。

-(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。

【问题讨论】:

正如您提到的那样,它有时会发生,它可能与响应有关。即当您单击代表调用表一或集合一的单元格时? 【参考方案1】:

实施了以下方法来解决您的问题:

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

    let yourCell = tableView.cellForRow(at: indexPath)

    yourCell?.backgroundColor = UIColor.black

这段代码在 Swift 中,你需要把它转换成 Objective-C。

此方法调用您选择的上一个单元格,它正在取消选择。

【讨论】:

【参考方案2】:
 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
    

【讨论】:

【参考方案3】:
//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!

【讨论】:

以上是关于如何避免在表格视图中突出显示两个单元格?的主要内容,如果未能解决你的问题,请参考以下文章

目标 C:如何在视图加载时突出显示表格视图中的第一个单元格?

单击时突出显示表格视图单元格

目标 C:如何突出显示 tableView 单元格并在重新加载表格时保持突出显示?

突出显示表格视图单元格 TextLabel 文本颜色

用户滑动时表格视图单元格突出显示

触摸时我的表格单元格不会立即突出显示