2

iOS の典型的な Container View の問題のように見えます。UISegmentedControl と Container View の 2 つのサブビューを持つ ViewController があります。Container View をストーリーボードに配置しましたが、どうすればよいかわかりません。当然のことながら、私の次のステップは、UIContainerView をサブクラス化して、iOS ドキュメントで読んだすべてのことを行うことだと考えました。しかし、UIContainerView のようなクラスはありません。だから今、私が絵コンテに入れることができたものを超えて、私は立ち往生しています. 誰かが私を助けてくれることを願って、単純なシナリオのように見えるものを仮定します.

想像:

  • 2 つのボタン (Cat、Dog) と ContainerView を備えた 1 つの ViewController。
  • ユーザーが catButton をクリックすると、ContainerView は CatViewController を表示する必要があります (dogButton についても同様に行います)。
  • ストーリーボードのセットアップが既に完了しているイメージ。
  • 簡単にするために、CatViewController に CAT という単語を含む単一の UILabel を含めます (DogViewController についても同様です)。
  • また、ストーリーボードでは、CatViewController と DogViewController を 2 つのスタンドアロンで到達不能なビュー コントローラーとして既に作成しています。

では、この時点で、どのように進めればよいでしょうか。UIContainerView などのクラスをサブクラス化できないので、どうすればよいですか?

このシナリオは、誰かが例を提供するのに十分単純だと思いますが、複雑すぎると思われる場合は、さらに単純なシナリオの例を提供してください。シンプルなものがどのように行われるかを見たいだけです。

PS私はすでにStackOverflowで次のようなツアーを行っています:

コンテナー ビューでの子ビューの交換

そして私はすでにhttps://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html#//apple_ref/doc/uid/TP40007457-CH18-SW6のドキュメントを読んでいます

4

1 に答える 1

1

ここに画像の説明を入力

2 つの UIButton の代わりに UISegmentedControl を使用する方がよいと思います。コンテナ ビューのサブビュー ( _vwContainer.subviews) には、最初に CatViewController のビューが含まれ、自動的にインスタンス化されます。

//  ViewController.m
#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *vwContainer;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _vwContainer.clipsToBounds = YES;
}

- (IBAction)onSegmentValueChanged:(UISegmentedControl *)sender {
    NSLog(@"Value changed to: %zd",sender.selectedSegmentIndex);
    NSLog(@"BEFORE: self.childViewControllers: %@",self.childViewControllers);
    NSLog(@"BEFORE: _vwContainer.subviews: %@",_vwContainer.subviews);

    // set oldVC & newVC
    UIViewController *oldVC = self.childViewControllers.firstObject;
    NSString *strIdNewVC;
    switch (sender.selectedSegmentIndex) {
        case 0:    strIdNewVC = @"catVC";   break;
        default:   strIdNewVC = @"dogVC";
    }
    UIViewController *newVC = [self.storyboard instantiateViewControllerWithIdentifier:strIdNewVC];

    //
    [oldVC willMoveToParentViewController:nil];
    [self addChildViewController:newVC];

    // Prepare animation transition, for example left to right
    newVC.view.frame = oldVC.view.frame;
    CGPoint pntEnd = oldVC.view.center;
    CGPoint pntInit = pntEnd;
    pntInit.x += oldVC.view.frame.size.width;
    newVC.view.center = pntInit;

    [self transitionFromViewController:oldVC toViewController:newVC
                              duration:0.25 options:0
                            animations:^{

                                newVC.view.center = pntEnd;

                              } completion:^(BOOL finished) {
                                  [oldVC removeFromParentViewController];
                                  [newVC didMoveToParentViewController:self];
                                  NSLog(@"AFTER: self.childViewControllers: %@",self.childViewControllers);
                                  NSLog(@"AFTER: _vwContainer.subviews: %@",_vwContainer.subviews);
                              }];
}

@end
于 2016-02-04T12:23:12.570 に答える