在Storyboard应用程序中的代码中推送ViewController时保留滚动位置

时间:2013-09-15 17:44:38

标签: ios objective-c uinavigationcontroller storyboard uicollectionview

我有一个故事板应用程序,它有一些视图控制器需要以编程方式推送到导航堆栈,而不是使用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从服务器中提取大量数据。

2 个答案:

答案 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];