2016-03-07 3 views
0

Я не хочу использовать управление страницей, потому что я должен изменить кнопку, когда пользователь прокручивается по горизонтали.UIViewControllers в ContentView UIScrollView?

Так что я использую UIScrollview и вид контейнера.

Следующее this tutorial Я могу добавить контроллер детского представления в виде контейнера, но прокрутка не прокручивается с автоматическим расположением.

Вот мой код

- (void)viewDidLoad { 
[super viewDidLoad]; 

self.array_pageContent = [[NSMutableArray alloc] init]; 

CallViewController *objGameReviewPageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CallViewController"]; 
[self addChildViewController:objGameReviewPageContentViewController]; 
UIView * view = objGameReviewPageContentViewController.view; 




HomeViewController *objHomeViewController= [self.storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; 
[self addChildViewController:objHomeViewController]; 
UIView * view1 = objHomeViewController.view; 





GroupViewController *objGroupViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"GroupViewController"]; 
[self addChildViewController:objGroupViewController]; 
UIView * view2 = objGroupViewController.view; 




CallenderViewController *objCallenderViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CallenderViewController"]; 
[self addChildViewController:objCallenderViewController]; 
UIView * view3 = objGroupViewController.view; 




CasesViewController *objCasesViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CasesViewController"]; 
[self addChildViewController:objCasesViewController]; 
UIView * view4 = objGroupViewController.view; 




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




    [self.array_pageContent addObject:view]; 
    [self.array_pageContent addObject:view1]; 
    [self.array_pageContent addObject:view2]; 
    [self.array_pageContent addObject:view3]; 
    [self.array_pageContent addObject:view4]; 


NSInteger pageCount = self.array_pageContent.count; 

self.pageControl.currentPage = 0; 
self.pageControl.numberOfPages = pageCount; 

self.mutableArray_pageContentViews = [[NSMutableArray alloc] init]; 
for (NSInteger i = 0; i < pageCount; ++i) { 
    [self.mutableArray_pageContentViews addObject:[NSNull null]]; 
} 

} 

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

CGSize pagesScrollViewSize = self.scrollViewContent.frame.size; 
self.scrollViewContent.contentSize = CGSizeMake(pagesScrollViewSize.width * self.array_pageContent.count, pagesScrollViewSize.height); 

[self loadVisiblePages]; 
} 

- (void)loadPage:(NSInteger)page { 
if (page < 0 || page >= self.array_pageContent.count) { 
    return; 
} 



UIView *pageView = [self.mutableArray_pageContentViews objectAtIndex:page]; 
if ((NSNull*)pageView == [NSNull null]) { 
    CGRect frame = self.scrollViewContent.frame; 
    frame.origin.x = frame.size.width * page; 
    frame.origin.y = 0.0f; 

    UIView *newPageView = nil; 
    newPageView = [self.array_pageContent objectAtIndex:page]; 

    newPageView.frame = frame; 
    [self.scrollViewContent addSubview:newPageView]; 
    [self.mutableArray_pageContentViews replaceObjectAtIndex:page withObject:newPageView]; 
} 
} 

- (void)purgePage:(NSInteger)page { 
if (page < 0 || page >= self.array_pageContent.count) { 
    return; 
} 

UIView *pageView = [self.mutableArray_pageContentViews objectAtIndex:page]; 
if ((NSNull*)pageView != [NSNull null]) { 
    [pageView removeFromSuperview]; 
    [self.mutableArray_pageContentViews replaceObjectAtIndex:page withObject:[NSNull null]]; 
} 
} 

- (void)loadVisiblePages { 
CGFloat pageWidth = self.scrollViewContent.frame.size.width; 
NSInteger page = (NSInteger)floor((self.scrollViewContent.contentOffset.x * 2.0f + pageWidth)/(pageWidth * 2.0f)); 

self.pageControl.currentPage = page; 

NSInteger firstPage = page - 1; 
NSInteger lastPage = page + 1; 

for (NSInteger i=0; i<firstPage; i++) { 
    [self purgePage:i]; 
} 

for (NSInteger i=firstPage; i<=lastPage; i++) { 
    [self loadPage:i]; 
} 

for (NSInteger i=lastPage+1; i<self.array_pageContent.count; i++) { 
    [self purgePage:i]; 
} 
} 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
[self loadVisiblePages]; 
} 

И иерархия раскадровка enter image description here

ответ

2

Удалить Container Вид из представлений Иерархия колесика будет работать.

и replcae ваш метод просмотраDidLoad() из следующего кода.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    CGFloat width = 0.0; 

    self.array_pageContent = [[NSMutableArray alloc] init]; 

    CallViewController *objGameReviewPageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CallViewController"]; 
    [self addChildViewController:objGameReviewPageContentViewController]; 
    width = objGameReviewPageContentViewController.view.frame.size.width; 
    [self.scrollViewContent addSubview:objGameReviewPageContentViewController.view]; 

// UIView * view = objGameReviewPageContentViewController.view; 




    HomeViewController *objHomeViewController= [self.storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; 

    CGRect frame = objHomeViewController.view.frame; 
    frame.origin.x = objGameReviewPageContentViewController.view.frame.size.width; 
    objHomeViewController.view.frame = frame; 
    width += frame.size.width; 

    NSLog(@"%f",width); 

    [self addChildViewController:objHomeViewController]; 
    [self.scrollViewContent addSubview:objHomeViewController.view]; 
// UIView * view1 = objHomeViewController.view; 





    GroupViewController *objGroupViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"GroupViewController"]; 

    frame = objGroupViewController.view.frame; 
    frame.origin.x = objGameReviewPageContentViewController.view.frame.size.width*2; 
    objGroupViewController.view.frame = frame; 
    width += frame.size.width; 

    NSLog(@"%f",width); 

    [self addChildViewController:objGroupViewController]; 
    [self.scrollViewContent addSubview:objGroupViewController.view]; 
// [self addChildViewController:objGroupViewController]; 
// UIView * view2 = objGroupViewController.view; 




    CallenderViewController *objCallenderViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CallenderViewController"]; 

    frame = objCallenderViewController.view.frame; 
    frame.origin.x = objGameReviewPageContentViewController.view.frame.size.width*3; 
    objCallenderViewController.view.frame = frame; 
    width += frame.size.width; 

    NSLog(@"%f",width); 

    [self addChildViewController:objCallenderViewController]; 
    [self.scrollViewContent addSubview:objCallenderViewController.view]; 

// [self addChildViewController:objCallenderViewController]; 
// UIView * view3 = objGroupViewController.view; 




    CasesViewController *objCasesViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CasesViewController"]; 

    frame = objCasesViewController.view.frame; 
    frame.origin.x = objGameReviewPageContentViewController.view.frame.size.width*4; 
    objCasesViewController.view.frame = frame; 
    width += frame.size.width; 

    NSLog(@"%f",width); 

    [self addChildViewController:objCasesViewController]; 
    [self.scrollViewContent addSubview:objCasesViewController.view]; 

// [self addChildViewController:objCasesViewController]; 
// UIView * view4 = objGroupViewController.view; 




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

    self.scrollViewContent.contentSize = CGSizeMake(width, self.scrollViewContent.frame.size.height); 




//  [self.array_pageContent addObject:view]; 
//  [self.array_pageContent addObject:view1]; 
//  [self.array_pageContent addObject:view2]; 
//  [self.array_pageContent addObject:view3]; 
//  [self.array_pageContent addObject:view4]; 


// NSInteger pageCount = self.array_pageContent.count; 
//  
// self.pageControl.currentPage = 0; 
// self.pageControl.numberOfPages = pageCount; 
//  
// self.mutableArray_pageContentViews = [[NSMutableArray alloc] init]; 
// for (NSInteger i = 0; i < pageCount; ++i) { 
//  [self.mutableArray_pageContentViews addObject:[NSNull null]]; 
// } 

} 
+0

Контейнерный вид необходим 1. Динамическая высота в UITableView/UICollection 2. Он будет вызывать методы жизненного цикла добавленных элементов ViewsControllers. –

+0

так почему вы не использовали Collection view вместо Container view? –

+0

CollectionView вместо представления контейнера. Его внутри UIViewController, который будет показан в ContainerView. Высота TableView будет автоматически отображать представление Container View. –

0

Пожалуйста, следуйте ссылке ниже. это решит вашу проблему. Также, пожалуйста, не пишите слишком много кода, это будет легко сделано с помощью раскадровки.

https://github.com/mluton/EmbeddedSwapping

+0

Рассмотрим более подробный ответ, пожалуйста =) – Paradoxetion

+0

У меня есть один вид контейнера, и нужно добавить и удалить View Controller, когда я прокручивать поэтому не может использовать SEGUE и прагматично добавить вид Контроллеры –

+0

@Saood. Пожалуйста, внимательно прочитайте вопрос, прежде чем предлагать это третье лицо. –

Смежные вопросы