2012-01-22 2 views
4

私はストーリーボードを持っています。その中にUIViewControllerがあります - 私はUIScrollViewとUIPageControlを入れました。そして、各ページ(私は3を持っていると言います)では、UIViewController(異なるラベルとテーブル値を表示します)をロードしようとしています。UIScrollViewはStoryBoardとどのように連携し、異なるUIViewControllerを表示しますか?

問題 - すべてをロードできますが、ラベルと表は表示されません。私は各ページの背景色を変更しようとします。変更されます。私は様々な投稿とコードを研究していますが、何も動作しない/ StoryBoard(UIViewControllerのラベルとテーブルを表示)でUIScrollViewを表示するものはありません。

私は別のXIBファイルをロードすることでこれを行うことができますが、セグ全体が中断されます。 以下のコードをご覧ください。

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

//ScrollView and PageControl 

// Create view controllers placeholder array 
NSMutableArray *controllers = [[NSMutableArray alloc] init]; 
for (int i = 0; i < numberOfPages; i++) 
{ 
    [controllers addObject:[NSNull null]]; 
} 
self.viewControllers = controllers;  
// Set Scroll View 
scrollView.pagingEnabled = YES; 
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * numberOfPages, scrollView.frame.size.height); 
scrollView.showsHorizontalScrollIndicator = NO; 
scrollView.showsVerticalScrollIndicator = NO; 
scrollView.scrollsToTop = NO; 
scrollView.delegate = self; 
// Set Page Control 
pageControl.numberOfPages = numberOfPages; 
pageControl.currentPage = 0; 
// Load the visible and next page 
[self loadScrollViewWithPage:0]; 
[self loadScrollViewWithPage:1]; 
} 

- (void)scrollViewDidScroll:(UIScrollView *)sender 
{ 
if (pageControlUsed) 
{ 
    // To know if scroll is valid - from Page Control 
    return; 
} 

// Changes Page Control indicator 
CGFloat pageWidth = scrollView.frame.size.width; 
int page = floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
pageControl.currentPage = page; 

// Load the visible, previous and next pages 
[self loadScrollViewWithPage:page - 1]; 
[self loadScrollViewWithPage:page]; 
[self loadScrollViewWithPage:page + 1]; 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
pageControlUsed = NO; 
} 

- (void)loadScrollViewWithPage:(int)page 
{ 
if (page < 0) return; 
if (page >= numberOfPages) return; 

// Load new Controller 
ReportsDetailViewController *controller = [viewControllers objectAtIndex:page]; 
if ((NSNull *)controller == [NSNull null]) 
{ 
    controller = [[ReportsDetailViewController alloc] init]; 
    controller.pageNumber = [NSNumber numberWithInt:page]; 
    [viewControllers replaceObjectAtIndex:page withObject:controller]; 
} 
if (nil == controller.view.superview) 
{ 
    CGRect frame = scrollView.frame; 
    frame.origin.x = frame.size.width * page; 
    frame.origin.y = 0; 
    controller.view.frame = frame; 
    [scrollView addSubview:controller.view]; 
} 
} 
+0

ここに追加する必要があるものはありますか?応答してください - 質問をここで死なせてはいけません。ありがとう。 – Aman

答えて

3

は、このようなあなたのViewControllersを作成してください:

YourViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"YourViewController"]; 

あなたは属性インスペクタで、あなたのビューコントローラの識別子を設定することができます。

私は今日も同じ問題を抱えていましたが、これは私のためのトリックでした。

+0

これは、ソリューションのおかげでスムーズに機能しました。 UIScrollViewで読み込まれるUIViewControllerには別のことがあります。コントローラにテーブルがあり、行選択に新しいコントローラを表示したい(そしてスクロールビューを削除する)。 今すぐ新しいコントローラが読み込まれますが、スクロールビュー内にあり、正しいオフセットから開始されません。 – Aman

関連する問題