我有一个故事板应用程序,它有一些视图控制器需要以编程方式推送到导航堆栈,而不是使用segues。我正在使用以下代码来执行此操作:
POCollectionViewController* vc = [self.storyboard instantiateViewControllerWithIdentifier:@"categoryView"];
POCategory* destination = (POCategory*)self.collections[indexPath.row];
[vc setShowingCollection:destination];
[self.navigationController pushViewController:vc animated:YES];
我的问题是,当我使用segues按下视图控制器并按下“后退”按钮时,滚动位置会保留,但当我使用上面的代码并按下“后退”按钮时,我的上一个视图控制器出现顶部有滚动条。
是否重新实例化应该已经在导航堆栈上的视图控制器?如何保留滚动位置?
修改
setShowingCollection:
-(void)setShowingCollection:(POCategory*)collection
{
self->showingCollection = collection;
self.title = collection.name;
self.HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
self.HUD.delegate = self;
[self.HUD showWhileExecuting:@selector(buildDisplayItems) onTarget:self withObject:nil animated:YES];
}
buildDisplayItems
方法根据显示集合的ID从服务器中提取大量数据。
答案 0 :(得分:0)
我认为你没有正确弹出控制器,你没有弹出推出的控制器,而是弹出一个最新的控制器。你如何在你的后退按钮中做流行音乐控制器?
你应该这样做:
[self.navigationController popViewControllerAnimated:YES];
答案 1 :(得分:0)
我的想法是,如果必须为每个“segue”实例化一个新控制器,则必须保存滚动位置,当您重新加载视图时,会导致uiscrollview滚动。
保存在属性中的这样的东西应该可以解决问题:
CGRect scrolledRect = CGRectMake(scrollView.contentOffset.x, scrollView.contentOffset.y, scrollView.bounds.size.width, scrollView.bounds.size.height);
然后当你重装:
[scrollView scrollRectToVisible:scrolledRect animated:NO];