9

現在のiPhoneアプリでストーリーボードを使用することにしました。私は少し問題に直面しています。UIViewControllerインスタンスを再利用する必要があります。

それはどういう意味ですか?ええと、例えば私はテーブルビューコントローラーを持っています。セルをタップすると、ストーリーボードから別のビューコントローラーが読み込まれ、ナビゲーションコントローラースタックにプッシュされます。これはすべてうまく機能しますが、このViewControllerがロードされるたびに約0.5秒から1秒かかります。ストーリーボードを使用する前は、作成したインスタンスをキャッシュすることでこの問題を解決したので、2回目にセルをタップすると、ViewControllerがすぐに表示されます。

作成されたインスタンスをキャッシュするということは、次のような意味です。

if (!cachedInstance) {
    cachedInstance = [MyViewController new];
}
[self.navigationController pushViewController:cachedInstance];

ストーリーボードを使用してこれを実現する方法を知っている人はいますか?前もって感謝します。

4

1 に答える 1

10

セグエを使用している場合は、以前と同じようにキャッシュされたView Controllerを使用するために、カスタムセグエを作成する必要があります。それ以外の場合、通常の「プッシュ」セグエは、のViewControllerの新しいインスタンスを作成しますsegue.destinationViewController。カスタムUIStoryboardSegueクラスを作成してcustom seguesを使用する場合はinitWithIdentifier:source:destination:、キャッシュされたView Controllerをオーバーライドして配置しdestinationViewController、オーバーライドperformしてクラシックpushViewController呼び出しを使用できます。

あなたが本当にそれらを使うことに熱心であるならば、それはあなたがセグエを扱う方法です。ただし、絵コンテにすべてを配置するための派手な矢印が本当に必要な場合を除いて、スキップします。スキップすると、View Controllerをキャッシュにインスタンス化して、以前と同じようにプッシュできます。

ストーリーボード内にViewControllerを配置することに関する質問の場合は、次を使用できます。

UIViewController *vc = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"Some View Controller"];

次に、それをキャッシュに保存して、サンプルコードで行ったようにプッシュできます。

お役に立てば幸いです。

于 2012-07-24T19:59:36.787 に答える