我有一个带有Table View的UISplitViewController用于导航。它类似于Mail应用程序。在纵向模式下单击表视图时,弹出窗口会隐藏自身。单击导航栏以返回弹出窗口时,所选项目不再显示为已选中。如何在不重新选择项目的情况下选中此项目? (就像在邮件应用程序中一样)
答案 0 :(得分:2)
在viewDidLoad方法中,您是否致电
self.clearsSelectionOnViewWillAppear = NO;
?
这就是Xcode的SplitView模板的功能。
答案 1 :(得分:0)
你有任何改变吗
[tableView deselectRowAtIndexPath:indexPath animated:YES];
在RootViewController的didSelectRowAtIndexPath中?
答案 2 :(得分:0)
我有一个有效的解决方案,但令人沮丧的是hacky。我必须两次调用selectRowAtIndexPath。似乎cellForRowAtIndexPath使viewWillAppear中的选择无效。但仍然需要在viewDidAppear中调用它,因此视图在调用cellForRowAtIndexPath之前滚动到正确的位置。
- (void)viewWillDisappear:(BOOL)animated
{
NSIndexPath *selected = [self.tableView indexPathForSelectedRow];
_selectedRow = selected.row;
}
- (void)viewDidAppear:(BOOL)animated
{
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_selectedRow inSection:0];
[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//initialize cell code here...
if (indexPath.row == _selectedRow) {
[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];
}
}
答案 3 :(得分:0)
对于您的表格视图控制器,在显示弹出窗口之前调用-viewWillAppear:
?如果是这样,你可以这样写:
- (void)viewWillAppear:(BOOL)animated
{
[self.tableView selectRowAtIndexPath:<indexPath>
animated:animated
scrollPosition:UITableViewScrollPositionMiddle];
[super viewWillAppear:animated];
}
显然,用适当的索引路径替换<indexPath>
并按照您想要的方式设置滚动位置。您可能还希望传递NO
而不是animated
,以使其看起来像是在视图出现之前被选中。