7

我刚刚开始使用tableViews,并且我在嵌入navigationController 的viewController 中的tableview 中有5 个单元格。当按下一个单元格时,另一个视图被推入。我的问题是我按下的单元格被选中,但选择并没有消失。我试过这段代码:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView deselectRowAtIndexPath:indexPath animated:NO];

NewViewController *newViewController = [[NewViewController alloc] init];

newViewController.theTitle = [self.tableView cellForRowAtIndexPath:indexPath].textLabel.text;

[self.navigationController pushViewController: newViewController animated:YES];

}

tableView 在 vi​​ewDidLoad 方法中初始化。

仍然当我单击一个单元格时,新的 viewController 被推入,但该单元格保持选中状态。这里可能是什么问题?

4

4 回答 4

33

您已将代码放入 didDeselectRowAtIndexPath - 将其放入 didSelectRowAtIndexPath。这是一个容易犯的错误,因为 didDeselect 在 didSelect 之前出现在代码完成中。

于 2013-10-31T22:59:31.690 回答
3

摘要

  • 您有一个位于 NavigationController 中的 ViewController 中的 tableview
  • 使用触摸单元格
  • 一个新的 ViewController 被推送到 NavigationController 堆栈上
  • 用户回击并返回到您拥有 tableView 的屏幕

这就是我从你的问题中理解的。
此时,您的 tableView 中的单元格仍应被选中,以便用户提醒他完成的最后一个操作,但您还希望它在这一点上获得未选中的动画(邮件应用程序是一个很好的例子这种行为)。

因此,取消选择 tableView 中的单元格的最佳位置是在 - (void)viewDidAppear:(BOOL)animatedUIViewController 的方法中,该方法在其视图中包含 tableview。通过这样做,您将让用户有机会在选择像在邮件中那样轻轻消失之前看到它。

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:animated];
}

nil您可以作为 的参数传递deselectRowAtIndexPath,tableView 可以优雅地处理它。

于 2013-10-31T23:52:16.873 回答
2

你也实施了tableView:didSelectRowAtIndexPath:吗?每次点击单元格时都会调用此方法。所以你应该把你的代码放在那里。

The method you are using, tableView:didDeselectRowAtIndexPath:is called whenever a cell is selected and you are tapping a different cell.

于 2013-10-31T23:00:54.560 回答
1

我认为你的问题是你使用了错误的方法。更改didDeselectRowAtIndexPathdidSelectRowAtIndexPath

于 2013-10-31T22:59:54.503 回答