2

私は本質的に多くの異なるテストのシーケンスであるアプリを開発しています(簡単にするために、SATテストまたはMensaテストについて考えてください)。各テストは、異なるView +ViewControllerで実装されます。

当初は、ストーリーボードとUINavigationControllersを使用して、テストのシーケンスとそれらの間の遷移を管理したかったのですが、現在、このアプローチの有効性に疑問を持っています。UINavigationControllerはスタックですが、私のナビゲーションは一方向のみです(テストを完了すると、元に戻すことはできません)。アプリを実装するためのより良い方法はありますか?ストーリーボードをどうにかして活用できますか?

4

3 に答える 3

8

カスタムコンテナビューコントローラを使用します。したがって、メインシーンに「コンテナビュー」を追加します。ターゲットがiOS6の場合、ストーリーボードを編集するときに、カスタムのコンテナービューコントローラーのシーンにドラッグできる特別な「コンテナービュー」オブジェクトがあります。

コンテナビュー

iOS 5の場合、(a)最初の子シーンを手動で作成する必要があります。(b)一意のストーリーボードIDを指定します(私の例では、、InitialChildおよび(c)最初の子コントローラーを手動でインスタンス化し、プログラムで子として追加します。したがって、カスタムコンテナービューコントローラーのシーンでUIView呼び出されたと仮定すると、containerView次のようなメソッドを持つことができます:

- (void)addInitialChild
{
    UIViewController *child = [self.storyboard instantiateViewControllerWithIdentifier:@"InitialChild"];

    [self addChildViewController:child];
    child.view.frame = self.containerView.bounds;
    [self.containerView addSubview:child.view];
    [child didMoveToParentViewController:self];
}

次のシーンに移行したいときは、自分のシーンをサブクラス化してくださいUIStoryboardSegue

ReplaceSegue.hの場合:

@interface ReplaceSegue : UIStoryboardSegue

@end

ReplaceSegue.mで

@implementation ReplaceSegue

- (void)perform
{
    UIViewController *source = self.sourceViewController;
    UIViewController *destination = self.destinationViewController;
    UIViewController *container = source.parentViewController;

    [container addChildViewController:destination];
    destination.view.frame = source.view.frame;
    [source willMoveToParentViewController:nil];

    [container transitionFromViewController:source
                           toViewController:destination
                                   duration:0.5
                                    options:UIViewAnimationOptionTransitionCrossDissolve
                                 animations:^{
                                 }
                                 completion:^(BOOL finished) {
                                     [source removeFromParentViewController];
                                     [destination didMoveToParentViewController:container];
                                 }];
}
@end

次に、最初に含まれるシーンから次のシーンにセグエを実行するときに、「カスタム」セグエを指定し、この「ReplaceSegue」をクラスとして使用します(セグエをクリックして選択し、「属性インスペクター」を確認します)。 。

ここに画像の説明を入力してください

結果のストーリーボードは次のようになります({}さまざまな子の間の「」の指定に注意してください)。

封じ込めストーリーボード


参照:

于 2013-01-02T16:30:50.003 に答える
0

次に、次のView Controllerをロードし、現在のビュー(トップレベルビューまたはアプリウィンドウ内)を新しいビューに置き換えます。必要に応じてアニメーションを追加します。どうしたの?

于 2013-01-02T16:16:19.340 に答える
0

ビューアニメーションを使用して、ビューコントローラのプッシュを回避することもできます。VCをプッシュするようなビューアニメーションを与えることができます。

于 2013-01-02T16:18:37.267 に答える