我的导航堆栈View1
和View2
中有2个观看次数。 View1
是tableView
。所以我要做的是deselectRow when I come back from
View2 to
View1`。如果这样做就行得很好:
- (void)viewWillAppear:(BOOL)animated {
NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView deselectRowAtIndexPath:myIP animated:NO];
}
但我还需要重新加载那一行。但是,如果要致电reload
,deselect
无效:
- (void)viewWillAppear:(BOOL)animated {
self.navigationController.navigationBarHidden = NO;
NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView deselectRowAtIndexPath:myIP animated:NO];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:myIP] withRowAnimation:UITableViewRowAnimationNone];
}
我也试过select
行和deselect
它,这有效,但问题是我第一次打开View1或从另一个View打开,我看到取消选择动画
- (void)viewWillAppear:(BOOL)animated {
self.navigationController.navigationBarHidden = NO;
NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:myIP] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView selectRowAtIndexPath:myIP animated:NO scrollPosition:UITableViewScrollPositionNone];
[self.tableView deselectRowAtIndexPath:myIP animated:NO];
}
有什么建议吗?提前谢谢......
答案 0 :(得分:0)
在跳转到新视图之前,您是否可以取消选择 didSelectRowAtIndexPath:(对于view1)中的行?这样你就不用担心在返回时取消它。这就是我通常会做的事情。
答案 1 :(得分:0)
通常在从一个视图移动到另一个视图时,如果第一个视图是表视图,那么在表视图delagate源中将有方法“didSelectRowAtIndexPath:”,在此方法下我们将调用类并在调用时有两种类型 1.使用PresentModalViewController - 就像导航一样,使用后退按钮可以调用第一个视图。 2.使用PushViewController - 它将只是移动到下一个视图并返回到相同的视图我们必须再次添加一个IBACTION按钮并使用dismiss模态viewcontroller。
这是两种观点之间的运动方法.....
答案 2 :(得分:0)
我同意在移动到下一个视图之前取消选择该行听起来像是您的最佳选择,但是,我发现最好在viewDidDisappear
方法中取消选择行,如下所示:
- (void)viewDidDisappear:(BOOL)animated
{
NSIndexPath *selected = [self.tableView indexPathForSelectedRow];
if ( selected ) [self.tableView deselectRowAtIndexPath:selected animated:NO];
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
如果在选择单元格时更改单元格中的任何格式,例如更改行高,则该代码的最后两行将有所帮助。如果选定/未选定行的格式保持不变,则可以忽略这两行。