0

セグエではなく、プログラムでナビゲーション スタックにプッシュする必要があるビュー コントローラーがいくつかあるストーリーボード アプリがあります。私はそれを行うために次のコードを使用しています:

POCollectionViewController* vc = [self.storyboard instantiateViewControllerWithIdentifier:@"categoryView"];
POCategory* destination = (POCategory*)self.collections[indexPath.row];
[vc setShowingCollection:destination];
[self.navigationController pushViewController:vc animated:YES];

私の問題は、セグエを使用してView Controllerをプッシュし、「戻る」ボタンを押すと、スクロール位置が保持されることですが、上記のコードを使用して「戻る」ボタンを押すと、以前のView Controllerがスクロールして表示されることです上部のバー。

既にナビゲーション スタック上にあるはずのビュー コントローラーを再インスタンス化していますか? スクロール位置を保持するにはどうすればよいですか?

の編集 コード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 に基づいて、サーバーから一連のデータをフェッチします。

4

2 に答える 2

0

コントローラーを正しくポップしていないと思います。プッシュされたコントローラーにポップしていませんが、最新のコントローラーにポップしています。戻るボタンでポップコントローラーをどのようにしていますか?

あなたはこのようにする必要があります:

[self.navigationController popViewControllerAnimated:YES];

于 2013-09-15T18:23:51.363 に答える
0

私の当面の考えは、「セグエ」ごとに新しいコントローラーをインスタンス化する必要がある場合、スクロール位置を保存する必要があり、ビューをリロードするとuiscrollviewがスクロールするということです。

プロパティに保存されたこのようなものは、トリックを行う必要があります:

CGRect scrolledRect = CGRectMake(scrollView.contentOffset.x, scrollView.contentOffset.y, scrollView.bounds.size.width, scrollView.bounds.size.height);

次に、リロードすると:

 [scrollView scrollRectToVisible:scrolledRect animated:NO];
于 2013-09-15T18:26:34.987 に答える