如何在单元格选择/取消选择时正确切换 UITableViewCell 的 accesoryType?

     2023-02-27     216

关键词:

【中文标题】如何在单元格选择/取消选择时正确切换 UITableViewCell 的 accesoryType?【英文标题】:How to properly toggle UITableViewCell's accesoryType on cell selection/deselection? 【发布时间】:2012-01-15 14:46:20 【问题描述】:

我正在尝试在选择/取消选择表格单元格时切换 accesoryType...行为应该是:点击 -> 将附件类型设置为 UITableViewCellAccessoryCheckmark -> 点击再次单元格 -> 回滚到 UITableViewCellAccessoryNone 类型。 我的控制器中的实现如下:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
   
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark];


- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setAccessoryType:UITableViewCellAccessoryNone];

...无论如何,一旦将样式配置为 UITableViewCellAccessoryCheckmark,我将无法将其恢复为 UITableViewCellAccessoryNone! 我也试过打电话:

[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];

但不删除复选标记...我该怎么办?

编辑:实现没问题,问题出在自定义 UITableViewCell 子类中......对不起:P

【问题讨论】:

【参考方案1】:

如果这是你想要的,试试这个

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
       
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        if (cell.accessoryType == UITableViewCellAccessoryCheckmark)
        
            cell.accessoryType = UITableViewCellAccessoryNone;
        
        else
        
            cell.accessoryType = UITableViewCellAccessoryCheckmark;
        
    

【讨论】:

快速和肮脏的:cell.accessoryType ^= UITableViewCellAccessoryCheckmark :)【参考方案2】:

如果您只想将一行作为复选标记,请使用此

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = (cell.accessoryType == UITableViewCellAccessoryCheckmark) ? UITableViewCellAccessoryNone : UITableViewCellAccessoryCheckmark;
    if (_lastSelectedIndexPath != nil)
    
        UITableViewCell *lastSelectedCell = [tableView cellForRowAtIndexPath:_lastSelectedIndexPath];
        lastSelectedCell.accessoryType = UITableViewCellAccessoryNone;
    
    _lastSelectedIndexPath = indexPath;
 

【讨论】:

【参考方案3】:

再次点击单元格等同于选择单元格而不是取消选择。

您需要在- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 方法中进行切换以检查cell.accessoryType == UITableViewCellAccessoryCheckmark 是否存在。

【讨论】:

【参考方案4】:
- (void)tableView:(UITableView *)theTableView didSelectRowAtIndexPath:(NSIndexPath *)newIndexPath 
    [theTableView deselectRowAtIndexPath:[theTableView indexPathForSelectedRow] animated:NO];
    UITableViewCell *cell = [theTableView cellForRowAtIndexPath:newIndexPath];
    if (cell.accessoryType == UITableViewCellAccessoryNone) 
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        // Reflect selection in data model
     else if (cell.accessoryType == UITableViewCellAccessoryCheckmark) 
        cell.accessoryType = UITableViewCellAccessoryNone;
        // Reflect deselection in data model
    

【讨论】:

UITableView 在进入编辑模式时取消选择单元格

】UITableView在进入编辑模式时取消选择单元格【英文标题】:UITableViewdeselectscellwhenenteringeditmode【发布时间】:2013-04-1809:19:51【问题描述】:我想在用户选择一个单元格时进入编辑模式(如果不是在编辑模式下),并在用户选择... 查看详情

如何在 UICollectionView 加载时选择单元格

】如何在UICollectionView加载时选择单元格【英文标题】:HowtoselectcellonUICollectionViewload【发布时间】:2015-04-1816:34:07【问题描述】:我正在加载一个集合视图,其中在单元格选择时,单元格会在其视图上绘制一个圆圈(UIView+CGRect)... 查看详情

如何取消表格单元格选择

】如何取消表格单元格选择【英文标题】:Howtocanceltablecellselection【发布时间】:2016-02-2607:15:01【问题描述】:我的所有表格单元格都允许选择,但是否可以在(此功能)tableView(tableVIew:UITableView,didSelectRowAtIndexPathindexPath:NSIndexPath... 查看详情

滑动手势不会取消选择单元格

】滑动手势不会取消选择单元格【英文标题】:Cellsarenotdeselectedwithswipegesture【发布时间】:2014-08-1522:24:30【问题描述】:我在表格视图中有三个单元格,用户可以点击该单元格到三个视图控制器。我刚刚注意到,当我使用滑动... 查看详情

在表格视图中选择新行时如何取消选择选定的行?

】在表格视图中选择新行时如何取消选择选定的行?【英文标题】:Howtodeselectaselectedrowwhenselectingthenewrowinatableview?【发布时间】:2013-01-2606:34:23【问题描述】:我有一个应用程序,当用户选择新单元格时,我需要在其中取消选择... 查看详情

在第二次点击时取消选择 UICollectionView 单元格

】在第二次点击时取消选择UICollectionView单元格【英文标题】:DeselectUICollectionViewcellonsecondtap【发布时间】:2017-12-1313:54:18【问题描述】:我的项目应用程序中有tableViews和collectionViews。在表格和集合中,我希望在第一次点击时选... 查看详情

如何在选择和取消选择单元格时仅保留 Array 中的不同元素?

】如何在选择和取消选择单元格时仅保留Array中的不同元素?【英文标题】:HowtokeeponlydistinctelementsinArraywhileselectinganddeselectingcells?【发布时间】:2015-12-1706:23:04【问题描述】:我有一个包含不同单元格的集合视图,我希望能够选... 查看详情

Swift 4 - 如果已选择,请取消选择集合视图单元格

...建集合视图时需要单击所选项目两次才能取消选择它们。如何解决双击的问题?extensionThirdVie 查看详情

选择/取消选择单元格的 UICollectionView 问题

】选择/取消选择单元格的UICollectionView问题【英文标题】:UICollectionViewissuewithSelect/Deselectcell【发布时间】:2018-03-2613:15:16【问题描述】:大家好,我在选择集合中的单元格时遇到问题。当然,为了管理选择和取消选择,我提供... 查看详情

取消隐藏时如何以正确的宽度显示隐藏的选择?

】取消隐藏时如何以正确的宽度显示隐藏的选择?【英文标题】:HowcanImakeahiddenselectdisplaywiththerightwidthwhenunhidden?【发布时间】:2020-08-1607:02:30【问题描述】:在我的表单中,用户在表示文本或数值的数据之间进行选择。当他们... 查看详情

带有自定义复选标记的swift ios uitableview在滚动时不断取消选择单元格

...自定义复选标记的swiftiosuitableview在滚动时不断取消选择单元格【英文标题】:swiftiostableviewwithcustomcheckmarkkeepsreselectingcellwhenscrolling【发布时间】:2016-08-0716:05:22【问题描述】:我有一个包含两个部分的表格视图和一个在选择单... 查看详情

ios UICollectionView 单元格选择和取消选择问题

】iosUICollectionView单元格选择和取消选择问题【英文标题】:iosUICollectionViewcellselectinganddeselectingissue【发布时间】:2017-11-2904:46:17【问题描述】:我使用UIcollection视图作为我的标签栏当我水平滚动集合视图时,当我选择新单元格... 查看详情

UISplitViewController 和单元格取消选择

】UISplitViewController和单元格取消选择【英文标题】:UISplitViewControllerandCellDeselection【发布时间】:2017-02-1004:18:50【问题描述】:我似乎在使用UISplitViewController和UITableViewController时遇到了一些奇怪的问题。发生的情况是,当我在tab... 查看详情

如何在表格单元格中正确放置选择标签

】如何在表格单元格中正确放置选择标签【英文标题】:Howtofitaselecttaginatablecellproperly【发布时间】:2013-04-0509:50:31【问题描述】:我正在拼命地尝试使选择标签适合表格单元格,就像它属于那里一样,而不是像有人用撬棍将它... 查看详情

如何在使用 reloadData 时执行单元格选择动画?

】如何在使用reloadData时执行单元格选择动画?【英文标题】:HowdoIperformcellselectionanimationswhileusingreloadData?【发布时间】:2015-06-2117:20:21【问题描述】:我有一个UICollectionView,我在UICollectionViewCell子类中覆盖setSelected以在用户选择... 查看详情

单击离开时取消选择表格单元格。迅速

】单击离开时取消选择表格单元格。迅速【英文标题】:Deselecttablecellwhenclickingaway.Swift【发布时间】:2017-06-2519:22:33【问题描述】:我有下表视图,但是当我单击视图控制器的侧面时,我希望能够取消选择目标单元格。我检查了... 查看详情

UITableViewCell 在取消选择时选择了阴影颜色

...2417:52:03【问题描述】:我有一个标准的UITableView。我想将单元格的textLabel的shadowColor设置为[UIColorwhiteColor],但仅在触摸单元格时。为此,我使用以下代码。它是一个自定义UITable 查看详情

在每个单元格都包含表格视图的表格视图中选择新单元格时,无法取消选择先前选择的单元格

】在每个单元格都包含表格视图的表格视图中选择新单元格时,无法取消选择先前选择的单元格【英文标题】:Can’tdeselectpreviouslyselectedcellwhenanewoneisselectedinatableviewwhereeachcellcontainstableview【发布时间】:2019-10-3009:02:05【问题描... 查看详情