【问题标题】:Deselecting a row in table view does not animate在表格视图中取消选择一行不会动画
【发布时间】:2011-07-07 08:18:00
【问题描述】:

我有一个管理表格视图的视图控制器。我的理解是,如果我推送另一个视图控制器然后弹回表格视图,则会自动取消选择表格单元格。

但是,在同一个类中(我使用了几次),当单元格被取消选择但没有动画时,有一个类的实例(它会变成蓝色,然后恢复正常而不动画)。为什么会这样?我有这个类的几个实例,但它只发生在其中一个上。这可能是什么原因造成的?

【问题讨论】:

    标签: iphone cocoa-touch uitableview uikit core-animation


    【解决方案1】:

    根据我的经验,如果您推送/弹出视图控制器(至少在使用导航控制器时不会),单元格不会自动取消选择,除非您添加一些代码并取消选择它! 如果您在 viewWill/DidAppear 中(或在这些方法中启动的进程中)执行 [tableView reloadData],也可能会自动取消选择它。

    您是否尝试在 viewDidAppear 中添加类似的内容?

    NSIndexPath *indexPath = [tableView indexPathForSelectedRow];
    if (indexPath != nil) {
        [tableView deselectRowAtIndexPath:indexPath animated:YES]
    }
    

    【讨论】:

    • 它被取消了,但仍然没有动画:(
    • 它应该被你的代码中的其他东西取消选择!在 - (UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 添加一些 NSLog ,当您从另一个视图返回时,不应为所选单元格调用它!如果它被调用,那肯定意味着你回来时正在调用 [tableView reloadData] !
    【解决方案2】:
        NSIndexPath *indexPath = [tableView indexPathForSelectedRow];
    if (indexPath != nil) {
        [tableView deselectRowAtIndexPath:indexPath animated:YES]
    }
    
    1. 这个你必须写在 didselectRowAtIndexPath 方法中

    【讨论】:

      【解决方案3】:

      您可以重新加载表格视图。

      在你看来会出现

      [yourTableView reloadData];
      

      或者如果你不想打扰你的数据源试试这个

      NSArray *array = [yourTableView visibleCells];
      for(UITableViewCell *cell in array)
      {
          cell.selected = NO;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多