我有一个UITableView,它作为子视图添加到视图中。选择行时,pushViewController:
将显示一个新视图,用户可以选择按后退按钮返回UITableView,但仍然选中该单元格。
在视图出现时有没有办法取消选择?
我已经读过我应该使用以下代码,但我无法使其正常工作。没有错误,没有警告,没有任何错误。
[tableProgram deselectRowAtIndexPath:[tableProgram indexPathForSelectedRow] animated:NO];
答案 0 :(得分:9)
您应该取消选择UITableView委托的 didSelectRowAtIndextPath 方法中的行。看起来应该是这样的。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
/* initialize your view controller here v and then push it */
SomeViewController *v = [[[SomeViewController alloc] init] autorelease];
[self.navigationController pushViewController:v animated:YES];
}
Dot将它与 didDeselectRowAtIndextPath 方法混淆 - 当人们在从智能感知中选择方法时不太注意时,就会发生这种情况。
答案 1 :(得分:2)
您可以使用的另一个地方是viewDidAppear
- (void)viewDidAppear:(BOOL)animated
并插入以下内容
NSIndexPath *indexPath = [tableView indexPathForSelectedRow];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
单击后单元格保持选中状态并推送到不同的视图控制器,但是当它弹回原始视图控制器时取消选择,因此它为用户提供了最后一个选定行的视觉提示。
答案 2 :(得分:0)
引用 SimonBS :
试过了,并希望它会起作用(对 得到动画)但似乎 viewDidAppear:(BOOL)动画和 viewWillAppear :( BOOL)动画不是 在子视图中调用。
honcheng的代码工作
-(void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSIndexPath *indexPath = [self.tableViewOutlet indexPathForSelectedRow];
[self.tableViewOutlet deselectRowAtIndexPath:indexPath animated:YES];
}
你只需要在TableView的superview上使用它。 (例如:如果你在视图中有一个带有TableView子视图的xib文件,你只需要转到相应的视图控制器代码并覆盖viewWillAppear,我就这样做了,它就可以了!你好视觉提示!)