iPhone UITableView单元保持选定状态
在我的UITableView有时单元格保持选中后触摸。 因为它只是偶尔发生,所以我无法重现问题。
任何提示? 也许这与不正确的释放tableView有关?
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSUInteger row = [indexPath row];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
switch (row) {
case 0:
FruitViewController *fruitController = [FruitViewController alloc];
[fruitController retain];
[fruitController initWithNibName:@"FruitView" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:fruitController animated:YES];
[fruitController release];
break;
case 1:
CerealsViewController *cerealsController = [CerealsViewController alloc];
[cerealsController retain];
[cerealsController initWithNibName:@"CerealsView" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:cerealsController animated:YES];
[cerealsController release];
break;
default:
break;
}
}
我无法告诉你为什么你看到这个问题,但这里有一些解决它的建议:
根据Apple HIG,选择不应该消失,直到从视图控制器刚刚推入堆栈返回。 如果你的控制器只是一个UITableViewController,它应该在返回到视图时自动取消选择。 如果没有,请添加
- (void) viewWillAppear:(BOOL)animated {
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:animated];
[super viewWillAppear:animated];
}
视图控制器中的某处。
如果有任何行点击时不会转到另一个视图,并且实际上没有做任何选择,它们不应该是可选择的,因此您可以覆盖该行
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
并且在不应该选择该行的情况下返回nil
。
一个可能的原因是覆盖-viewWillAppear:animated:
没有在扩展UITableViewController
的控制器中调用[super viewWillAppear]
。 在您的-viewWillAppear
方法的开头处添加[super viewWillAppear:animated]
可能会纠正问题。
为了展开“Ed Marty”的回答,我选择在“viewWillDisappear”方法中添加取消选择,因为我认为它看起来更好。
除此之外,我用UITableView和普通的UIViewController(而不是UITableViewController),所以tableView变量对我来说是不可用的。 为了克服这个问题,我在我的视图控制器头文件中添加了一个tableView属性(并且在我的XIB文件中,我将实际的表视图连接到属性)...
@property (nonatomic,retain) IBOutlet UITableView *tableView
...在视图控制器实现连接属性并执行取消选择,如下所示。
@synthesize tableView
- (void) viewWillDisappear:(BOOL)animated {
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:animated];
[super viewWillDisappear:animated];
}
链接地址: http://www.djcxy.com/p/60003.html
上一篇: iPhone UITableView cells stay selected
下一篇: What deselect selected cell when navigationController pops a view?