4

したがって、基本的にsplitViewControllerのように機能するcontainerView Controllerがあります。

containerViewController 内に UINavigationController を追加しようとしていますが、これは問題なく動作します。

ストーリーボードに UINavigationController を作成し、多数の UIViewControllers を接続して、すべて「プッシュ」セグエでフックしてリンクしました。この NavigationController をストーリーボードから取得し、コードを介して ContainerViewController に貼り付けます。次に、NavigationController を必要な場所に表示し、ボタンをクリックすると、ContainerViewController の NavigationController フレーム内でのみプッシュ アニメーションが発生します。

ただし、NavigationController のコードから popViewController を呼び出すと、ContainerViewController 全体がアニメーション化されます。私が望んでいないのは、NavigationController のみをアニメーション化することです。

なぜそれがそうするのか誰にも分かりますか?

ContainerViewController の内部に UINavigationController があり、NavigationController で popViewController を使用できる場合、内部に存在する ContainerViewController 全体ではなく、UINavigationController のみをアニメーション化するにはどうすればよいでしょうか?

4

1 に答える 1

1

私もこの問題を抱えていました。それは私のプッシュにも影響していました。私の回避策は、ストーリーボード セグエの代わりにコードを使用することでした。

- (void) switchToView:(NSString *)identifier {
    UIViewController *target = [self getOrCreateViewController:identifier];
    [self switchToViewController:target identifier:identifier];
}

// If you need to interact with the VC before it is pushed break it into 2 step process
- (UIViewController *) getOrCreateViewController:(NSString *)identifier {
    NSArray *children = [self.viewControllers filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"restorationIdentifier == %@", identifier, nil]];
    UIViewController *target = (children.count > 0 ? children[0] : [self.storyboard instantiateViewControllerWithIdentifier:identifier]);
    return target;
}

// For my use case, I always animate via push. Could modify this to pop/push as appropriate
- (void) switchToViewController:(UIViewController *)target identifier:(NSString *)identifier {
    [self setViewControllers:[self.viewControllers filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"restorationIdentifier != %@", identifier, nil]] animated:NO];
    [self pushViewController:target animated:YES];

}

私が知っているちょっと厄介な回避策...より良い答えが見つかることを願っています(ここで1つを探しています)。:-)

于 2012-11-22T15:56:26.210 に答える