Ste*_*fan 45 iphone cocoa-touch uitableview
在我的UITableView中,有时单元格在触摸后保持选中状态.因为它偶尔发生,我无法重现问题.
任何提示?也许它与tableView的unproper发布有关?
- (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;
}
}
Run Code Online (Sandbox Code Playgroud)
Ed *_*rty 98
我不能告诉你为什么你会看到这个问题,但这里有一些修复它的建议:
根据Apple HIG的说法,选择不应该消失,直到从刚刚推入堆栈的视图控制器返回.如果您的控制器只是一个UITableViewController,它应该在返回视图时自动取消选择.如果没有,请添加
- (void) viewWillAppear:(BOOL)animated {
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:animated];
[super viewWillAppear:animated];
}
Run Code Online (Sandbox Code Playgroud)
在视图控制器中的某个地方.
如果有任何行,当单击时,不要转到另一个视图,并且实际上在选择时不执行任何操作,它们不应该是可选择的,因此您可以在
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)
并且nil
在不应该选择行的情况下返回.
Fii*_*iid 21
一个可能的原因是覆盖-viewWillAppear:animated:
而不调用[super viewWillAppear]
扩展的控制器UITableViewController
.[super viewWillAppear:animated]
在-viewWillAppear
方法开头添加可能会纠正问题.
Oli*_*ain 11
为了扩展"Ed Marty"的答案,我选择在"viewWillDisappear"方法中添加取消选择,因为我认为它看起来更好.
除此之外,我使用的是带有常规UIViewController的UITableView(而不是UITableViewController),因此我无法使用tableView变量.为了解决这个问题,我在视图控制器头文件中添加了一个tableView属性(在我的XIB文件中,我将实际的表视图连接到属性)...
@property (nonatomic,retain) IBOutlet UITableView *tableView
Run Code Online (Sandbox Code Playgroud)
...并在视图控制器实现中连接属性并执行取消选择,如下所示.
@synthesize tableView
- (void) viewWillDisappear:(BOOL)animated {
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:animated];
[super viewWillDisappear:animated];
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是UITableViewController,则可以使用:
self.clearsSelectionOnViewWillAppear = YES;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26707 次 |
最近记录: |