0

Je veux ajouter UIPageController à UIView de viewControllerImpossible d'ajouter pageViewController à UIView

Voici mon code, mais il ne fonctionne pas,

MyViewController contient une vue qui est _viewExpense là, je veux ajouter mon viewcontroller.

MyViewController.m

- (void)viewDidLoad { 
    [super viewDidLoad]; 

     PageViewControllerDashboard *pageViewController = [[UIStoryboard storyboardWithName:@"MoneyBag" bundle:nil] instantiateViewControllerWithIdentifier:@"PageViewControllerDashboard"]; 

     [self addChildViewController:pageViewController]; 
     [_viewExpense addSubview:pageViewController.view]; 
     [pageViewController didMoveToParentViewController:self]; 
} 

PageViewControllerDashboard

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    _pageTitles = @[@"Over 200 Tips and Tricks", @"Discover Hidden Features", @"Bookmark Favorite Tip", @"Free Regular Update"]; 

    // Create page view controller 
    self.pageViewController.dataSource = self; 

    pageContentViewController *startingViewController = [self viewControllerAtIndex:0]; 
    NSArray *viewControllers = @[startingViewController]; 
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 

    // Change the size of page view controller 
    self.pageViewController.view.frame = CGRectMake(10, 10, self.view.frame.size.width, self.view.frame.size.height - 100); 


    UIPageControl *pageControl = [UIPageControl appearance]; 
    pageControl.pageIndicatorTintColor = [UIColor lightGrayColor]; 
    pageControl.currentPageIndicatorTintColor = [UIColor blackColor]; 
    pageControl.backgroundColor = [UIColor whiteColor]; 

} 

page View Controller Source des données

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    NSUInteger index = ((pageContentViewController*) viewController).pageIndex; 

    if ((index == 0) || (index == NSNotFound)) { 
     return nil; 
    } 

    index--; 
    return [self viewControllerAtIndex:index]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    NSUInteger index = ((pageContentViewController*) viewController).pageIndex; 

    if (index == NSNotFound) { 
     return nil; 
    } 

    index++; 
    if (index == [self.pageTitles count]) { 
     return nil; 
    } 
    return [self viewControllerAtIndex:index]; 
} 

- (pageContentViewController *)viewControllerAtIndex:(NSUInteger)index 
{ 
    if (([self.pageTitles count] == 0) || (index >= [self.pageTitles count])) { 
     return nil; 
    } 

    // Create a new view controller and pass suitable data. 
    pageContentViewController *pageContentViewController = [[UIStoryboard storyboardWithName:@"MoneyBag" bundle:nil] instantiateViewControllerWithIdentifier:@"pageContentViewController"]; 
    pageContentViewController.titleText = self.pageTitles[index]; 
    pageContentViewController.pageIndex = index; 

    return pageContentViewController; 
} 

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController 
{ 
    return [self.pageTitles count]; 
} 

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController 
{ 
    return 0; 
} 

Où je me trompe, aidez s'il vous plaît. Merci d'avance.

Répondre

0

Eh bien, la première erreur que j'ai remarqué est à l'intérieur PageViewControllerDashboard, sur cette ligne:

self.pageViewController.dataSource = self; 

vous définissez dataSource propriété de pageViewController-self. Ici, votre objet pageViewController s'attend à ce que toutes ses méthodes datasource soient déclarées à l'intérieur de PageViewControllerDashboard. Au lieu de cela, toutes les méthodes datasource sont déclarées dans la classe PageViewControllerDataSource. Donc ce que vous devez faire est d'initialiser une instance de classe PageViewControllerDataSource comme ceci:

PageViewControllerDataSource* pageViewControllerDataSource = [[PageViewControllerDataSource alloc] init] 

et faire cette instance de PageViewControllerDataSource DataSource pageViewController

Une fois que vous corriger la propriété datasource de votre UIPageController exemple, toutes les méthodes de source de données déclarées à l'intérieur PageViewControllerDataSource commenceront à être appelées et votre code devrait également commencer à s'exécuter comme prévu.