2

プロジェクトにページ スクロール機能を実装しようとしています。ストーリーボード (および ARC) を使用して、iOS 5 向けに開発しています。これは私がストーリーボードで行ったことです:

ここに画像の説明を入力

最初の viewController (左側) には、scrollView と pageControl があります。そのクラスは と呼ばGlobalDashboardViewControllerれ、クラスDashboardViewController(から継承) を継承しUIViewControllerます。他の 2 つのコントローラーは、識別子 ( MainDashboardおよびSecondaryDashboard ) を持つ単純な UIViewControllers です。

にはGlobalDashboardViewController.m、 childViewControllers を取得する viewDidLoad のみがあります。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"MainDashboard"]];
    [self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"SecondaryDashboard"]];
}

DashboardViewController.mはもう少し複雑です。最も重要な方法は次のとおりです。

- (void)viewDidLoad
{
    // Calling the viewDidLoad above to populate the childViewControllers array
    [super viewDidLoad];

    [self.scrollView setPagingEnabled:YES];
    [self.scrollView setScrollEnabled:YES];
    [self.scrollView setShowsHorizontalScrollIndicator:NO];
    [self.scrollView setShowsVerticalScrollIndicator:NO];
    [self.scrollView setDelegate:self];
}


-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.pageControl.currentPage = 0;
    _page = 0;
    [self.pageControl setNumberOfPages:[self.childViewControllers count]];

    UIViewController *viewController = [self.childViewControllers objectAtIndex:self.pageControl.currentPage];
    if (viewController.view.superview != nil) {
        [viewController viewWillAppear:animated];
    }

    self.scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * [self.childViewControllers count], scrollView.frame.size.height);
}

他にもたくさんの方法がありますが、関連性があるとは思いません。なぜなら、ここに私の問題があるからです。アプリが起動し、scrollView と pageControl が表示されます。GlobalDashboard viewControllerで設定したように、背景は濃い灰色です。正しくスクロールでき、pageControl が更新されます。しかし、他のビューは表示されません。ifにブレークポイントを配置してviewWillAppearを見るとviewController、正しく名前が付けられています (は、ストーリーボードでコントローラーに付けた名前です) が、ここでわかるように、Dashboard Page 1その_viewプロパティには0x00000000が表示されます。

ここに画像の説明を入力

そのため、実際にviewControllerを表示する魔法の一部が発生するifの中に入ることはありません...

私の作業は、ここで見つけることができるサンプル プロジェクトに基づいています: PageViewController . 実行すると、完全に機能します。自分のプロジェクトでそれを機能させることができない理由がわかりません。

何か案は ?

ありがとう

4

1 に答える 1

1

ビュー自体を追加することはありません ( [self.view addSubview:/*Your child controller's view*/])。リンク先のプロジェクトは、- (void)loadScrollViewWithPage:(int)pagePagerViewController.m 内でそれを行います

于 2012-09-25T08:32:23.800 に答える