从segue返回时,UITableViewCells不会取消选择

时间:2011-12-16 07:47:35

标签: ios uitableview segue

我有一个UITableView,其中包含一个Storyboard中的单元格,以及一个将单元格连接到另一个视图的segue。

当您选择一个单元格时,它会显示单元格选择动画(在我的情况下将单元格变为灰色)并将另一个视图推送到屏幕上。但是当您返回到tableview时,取消选择动画根本不会显示(与选择动画相反)。由于我只是使用了一个segue,我希望默认情况下可以使用它。

有没有办法强制它显示取消选择动画?

6 个答案:

答案 0 :(得分:23)

如果您的视图控制器是UITableViewController的子类并且clearsSelectedOnViewWillAppear设置为YES(这是默认值),则会自动处理。

在您的情况下,您可以采用与UITableViewController相同的方式执行此操作。取消选择-viewWillAppear:中的所选行。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
    [self.tableView deselectRowAtIndexPath:selectedIndexPath animated:YES];
}

答案 1 :(得分:11)

不确定segues的使用,但我经常想在视图控制器出现时刷新数据。但是,如果重新加载表,则清除选择行。这是我用来维护选定行并在返回时显示取消选择动画的一些代码。情况可能会对您有所帮助,所以我会在这里发布。

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    NSIndexPath *indexPath = [tableView indexPathForSelectedRow];
    [tableView reloadData];
    if(indexPath) {
        [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
    }
}

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

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

答案 2 :(得分:9)

确保您正在调用superviewWill...方法的viewDid...实施

答案 3 :(得分:3)

对于Swift 3

override func viewWillAppear(_ animated: Bool) {

    super.viewWillAppear(animated)
    if let path = tableView.indexPathForSelectedRow {

        tableView.deselectRow(at: path, animated: true)
    }
}

答案 4 :(得分:1)

Swift更新: -

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(true)
    if tableView.indexPathForSelectedRow != nil {
        let indexPath: NSIndexPath = tableView.indexPathForSelectedRow!
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
    }
}

答案 5 :(得分:1)

更好的Swift更新:

SELECT [requestType], 
  ( SELECT COUNT ([requestType]) FROM [Meeting] WHERE CAST([meetingCreatedTime] AS DATE) >= CAST(DateAdd(DAY,-30,Getdate()) AS DATE) AND [meetingStatus] = 'Approved') As 'Approved',
  ( SELECT COUNT ([requestType]) FROM [Meeting] WHERE CAST([meetingCreatedTime] AS DATE) >= CAST(DateAdd(DAY,-30,Getdate()) AS DATE) AND [meetingStatus] = 'Pending') As 'Pending',
  ( SELECT COUNT ([requestType]) FROM [Meeting] WHERE CAST([meetingCreatedTime] AS DATE) >= CAST(DateAdd(DAY,-30,Getdate()) AS DATE) AND [meetingStatus] = 'Canceled') As 'Canceled',
  ( SELECT COUNT ([requestType]) FROM [Meeting] WHERE CAST([meetingCreatedTime] AS DATE) >= CAST(DateAdd(DAY,-30,Getdate()) AS DATE) AND [meetingStatus] = 'Denied') As 'Denied'
  FROM [Meeting] 
  WHERE CAST([meetingCreatedTime] AS DATE) >= CAST(DateAdd(DAY,-30,Getdate()) AS DATE) GROUP BY [requestType]