我刚开始使用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被推入但单元格保持选中状态。这可能是什么问题?
答案 0 :(得分:33)
您已将代码放入didDeselectRowAtIndexPath中 - 将其放入didSelectRowAtIndexPath中。这是一个容易犯的错误,因为在didSelect之前,didDeselect出现在代码完成中。
答案 1 :(得分:3)
摘要:
这就是我从你的问题中理解的 此时,仍然应该选择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
。