0

I UIPageController zu UIView von viewControllerkann nicht pageViewController hinzufügen uiview

Hier ist mein Code hinzufügen möchten, aber es funktioniert nicht,

MyViewController eine Ansicht enthält, die _viewExpense es ich möchte hinzufügen 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-Datenquelle

- (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; 
} 

Wo ich Fehler mache, bitte helfen Sie mir. Vielen Dank im Voraus.

Antwort

0

Nun, der erste Fehler, die ich bemerkt innen PageViewControllerDashboard ist, auf dieser Linie:

self.pageViewController.dataSource = self; 

Sie setzen dataSource Eigenschaft pageViewController-self. Hier erwartet Ihr pageViewController Objekt, dass alle seine datasource Methoden in PageViewControllerDashboard deklariert sind. Stattdessen sind alle datasource Methoden in PageViewControllerDataSource Klasse deklariert. Also, was Sie tun sollten, ist eine Instanz der Klasse PageViewControllerDataSource wie so initialisieren:

PageViewControllerDataSource* pageViewControllerDataSource = [[PageViewControllerDataSource alloc] init] 

und diese Instanz von PageViewControllerDataSource Datenquelle von pageViewController

machen Sobald Sie die datasource Eigenschaft Ihrer UIPageController Instanz zu korrigieren, Alle Datenquellenmethoden, die in PageViewControllerDataSource deklariert sind, werden aufgerufen und Ihr Code sollte ebenfalls wie erwartet starten.

Verwandte Themen