1

UINavigationController?の正確なオブジェクト コピーを作成することは可能です。を使用してオブジェクトをコピーする例を見たことがありcopyWithZone:ますが、これを使用して をコピーする方法について混乱していますUINavigationController

何か助けはありますか?

4

2 に答える 2

1

UINavigationControllerプロトコルに準拠していないため、 orをNSCopying使用することはできません。copyWithZone:copy

アプリ全体で使用できるカスタマイズを探している場合は、UINavigationControllerそれをサブクラス化し、新しいモーダル ビュー コントローラーを作成するときなど、新しいインスタンスが必要になるたびにそのサブクラスの新しいインスタンスを作成する必要があります。

編集: 以前のナビゲーション コントローラーからビュー コントローラーを保持する場合は、次のようなことができます (必要に応じてサブクラス化されたナビゲーション コントローラーを使用します)。

UINavigationController *newNavigationController = [[UINavigationController alloc] init];
[newNavigationController setViewControllers:oldNavigationController.viewControllers animated:NO];

これにより、viewController の浅いコピーが作成されます。つまり、コピーではなく、元のナビゲーション コントローラーのビュー コントローラーへの参照が作成されます。ビュー コントローラーでディープ コピーを実行する場合は、はるかに複雑になり、ビュー コントローラーごとに特定のコピー コードが必要になります。(詳細については、こちらを参照してください)。

于 2012-08-30T06:38:20.587 に答える
0

これを行うには、カテゴリ (またはサブクラス) を作成し、カテゴリを NSCoding に準拠させ、必要なエンコードおよびデコード関数を追加します。次に、エンコードするプロパティ (現在配列内にあるビュー コントローラーの種類) を決定する必要があります。おそらく、これらのオブジェクトを NSCoding に準拠させる必要があります。これは簡単なことではありませんが、不可能ではないことがわかります。問題の解決には、他の手法を使用するのが最適であることがわかる場合があります。

編集:「複製」したい場合、本当に知っておく必要があるのは、配列内にある viewController です。したがって、「状態」を複製したいとします。これは、ある意味では元の回答と同じですが、厳密性は低くなります。各オブジェクトにカテゴリまたはメソッドを追加し、現在の状態を辞書として提供するように依頼します。navigationController の場合、それは現在スタック上にあるオブジェクトのクラスにすぎない可能性があります。

スタック上のこれらのオブジェクトごとに、それらの状態の辞書を取得します。状態とは、UITextFields、ビューなどにあるテキスト、そのオブジェクトが起動状態から現在の場所に戻るために必要なものを意味します。

これをすべてパッケージ化します - nav ディクショナリと状態のものの配列。これを plist として保存できます。後でどこにいたかを構築したい場合、navコントローラーはクラスを知ることで作成するオブジェクトを伝えることができます。次に、各オブジェクトが作成されると、辞書が送信され、「元の場所に戻る」ように指示されます。完了したら、別のコントローラーをスタックにプッシュします。

于 2012-08-30T13:03:14.237 に答える