Changing UIPageViewController's page programmatically doesn't update the UIPageControl

后端 未结 7 1716
悲哀的现实
悲哀的现实 2020-12-09 17:39

In my custom UIPageViewController class:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
           


        
7条回答
  •  囚心锁ツ
    2020-12-09 18:14

    // ViewController.h File
    
    #import 
    #import "PageContentViewController.h"
    
    @interface ViewScreen : UIViewController
    
    - (IBAction)Startwalkthrough:(id)sender;
    
    @property(strong, nonatomic)UIPageViewController *pageViewController;
    @property(strong, nonatomic)NSArray * pageTitles;
    @property(strong,nonatomic)NSArray * pageImages;
    
    @end
    
    // ViewController.m File
    #import "ViewScreen.h"
    
    @interface ViewScreen ()
    
    @end
    
    @implementation ViewScreen
    
    @synthesize pageTitles,pageImages;
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
    
        pageTitles =@[@"dianna",@"images",@"image",@"i1",@"hulk1",@"assasins"];
        pageImages =@[@"dianna",@"images",@"image",@"i1",@"hulk1",@"assasins"];
    
        self.pageViewController =[self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
        self.pageViewController.dataSource=self;
    
        PageContentViewController *startingViewController = [self viewControllerAtIndex:0];
    
        NSArray * viewController =@[startingViewController];
    
        [self.pageViewController setViewControllers:viewController direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
    
        [self addChildViewController:_pageViewController];
    
        [self.view addSubview:_pageViewController.view];
        [self.pageViewController didMoveToParentViewController:self];
    
    
    }
    
    -(IBAction)Startwalkthrough:(id)sender
    {
        PageContentViewController * startingViewController =[self viewControllerAtIndex:0];
        NSArray * viewControllers =@[startingViewController];
        [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionReverse animated:NO completion:nil];
    
    }
    
    - (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 = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"];
        pageContentViewController.imageFile = self.pageImages[index];
        pageContentViewController.titletext = self.pageTitles[index];
        pageContentViewController.pageIndex = index;
    
        return pageContentViewController;
    }
    
    
    #pragma mark - Page View Controller Data Source
    
    -(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
    {
        NSUInteger index =((PageContentViewController *) viewController).pageIndex;
        if (index == NSNotFound) {
            return nil;
        }
    
        index--;
        if (index ==[self.pageTitles count]) {
            return  nil;
    
    }
        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];
    }
    
    -(NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController{
        return  [self.pageTitles count];
    }
    
    -(NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
    {
        return  0;
    }
    @end
    
    
    // Second File
    
    PageViewController.h File 
    #import 
    
    @interface PageContentViewController : UIViewController
    
    @property (strong, nonatomic) IBOutlet UILabel *txtLabel;
    @property (strong, nonatomic) IBOutlet UIImageView *backgroundImageView;
    
    @property NSUInteger pageIndex;
    @property  NSString *titletext;
    @property NSString * imageFile;
    @end
    
    
    // SecondFile.M File
    #import "PageContentViewController.h"
    
    @interface PageContentViewController ()
    
    @end
    
    @implementation PageContentViewController
    
    
    
    -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self =[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            //
        }
        return  self;
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
    
        self.backgroundImageView.image =[UIImage imageNamed:self.imageFile];
        self.txtLabel.text =self.titletext;
    
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    
    /*
    #pragma mark - Navigation
    
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        // Get the new view controller using [segue destinationViewController].
        // Pass the selected object to the new view controller.
    }
    */
    
    @end
    

提交回复
热议问题