9

ボタンを押すと子ViewControllerが表示されるViewControllerがあります。これは完全に機能しますが、この子ビューコントローラを別の子ビューコントローラに変更したいのですが、この中にある次のボタンを押して、2ステップログインのようにします。何か案が?メインビューコントローラからは子を表示する方法を知っていますが、子からはそれを行う方法がわかりません。

4

1 に答える 1

44

ストーリーボードを使用している場合は、セグエの代わりに独自の子を作成できます。例:

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

次に、ストーリーボードを開き、コンテナビューをコンテナビューコントローラに配置し、子コントローラにカスタムセグエを最初の子シーンから2番目の子シーンに配置します。ReplaceSegue2つの子シーン間のカスタムセグエのクラスを指定する必要があります。

コンテナコントローラーストーリーボード

2番目の子ビューで自動レイアウトまたは自動サイズ設定を適切に使用した場合、すべてが正常に機能することに注意してください(特に、で宛先コントローラーのビューのフレームを手動で設定した場合ReplaceSegue)。しかし、Interface Builderでは、2番目の子シーンのレイアウトが正しく表示されず、シーンの適切なデザインが少し厄介になる可能性があります。これは、(少なくともXcode 4.5の時点では)2番目の子の「シミュレートされたメトリック」が原因です。シーンは適切なサイズを推測するのにうまくいきません。したがって、おそらく、その2番目の子シーンのシミュレートされたメトリックのサイズを「推定」から「フリーフォーム」に変更してから、2番目の子シーンのサイズを手動で調整する必要があります。

手動で調整された2番目の子シーンサイズのコンテナストーリーボード

これはあまりエレガントなXcodeエクスペリエンスではありませんが、機能します。また、自動レイアウトまたは自動サイズ変更マスクを適切に使用している場合、マイナーなバリエーションは非常に適切に処理されます。

于 2013-01-04T15:40:34.933 に答える