deselectRowAtIndexPath问题

时间:2013-10-31 22:56:10

标签: ios iphone objective-c uitableview

我刚开始使用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在viewDidLoad方法中初始化。

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

4 个答案:

答案 0 :(得分:33)

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

答案 1 :(得分:3)

摘要

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

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

所以取消选择tableView中单元格的最佳位置是UIViewController的 - (void)viewDidAppear:(BOOL)animated方法,该方法在其视图中有tableview。通过这样做,您将让用户有机会看到选择,然后像邮件一样轻轻消失。

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

您可以将nil作为deselectRowAtIndexPath的参数传递,tableView可以正常处理它。

答案 2 :(得分:2)

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

您正在使用的方法,只要选择了一个单元格并且您正在点击其他单元格,就会调用tableView:didDeselectRowAtIndexPath:

答案 3 :(得分:1)

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