2016-02-12 59 views

回答

1

只需創建一個容器uiviewcontroller,將有例如一個靜態按鈕和一個空的uiview。創建它們作爲iboutlets和通常屬性UIPageViewController稱爲pvc。然後你可以在代碼中創建一個pvc,並通過addSubview:將它添加到uiview插座。

這是從我上個週末做的一個項目複製的一些代碼。在UIPageViewController中有Skidata,並將一個雪花的UIImage作爲覆蓋。我只複製了代碼的相關部分。希望這將幫助你:

SkiViewController.m

@interface SkiViewController() <UIPageViewControllerDataSource> 

@property (strong, nonatomic) UIPageViewController *pageController; 
@property (strong, nonatomic) SkiDataArray* skiDataArray; 

@property (weak, nonatomic) IBOutlet UIImageView *imageView; 
@property (weak, nonatomic) IBOutlet UIView *pageDataView; 

@end 

@implementation SkiViewController 

- (SkiSubViewController *)viewControllerAtIndex:(NSUInteger)index 
{ 
    SkiSubViewController *childViewController = [[SkiSubViewController alloc] initWithNibName:@"SkiSubViewController" bundle:nil]; 
    childViewController.indexNumber = index; 

    if(self.skiDataArray) 
    { 
     childViewController.skiData = self.skiDataArray[index]; 
    } 

    return childViewController; 
} 

#pragma mark - lify cycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 

    self.pageController.dataSource = self; 

    [self addPageControllerViewControllers]; 
    [self addPageControllerView]; 

    [self addChildViewController:self.pageController]; 
    [self.pageController didMoveToParentViewController:self]; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self updateData]; // download ski data and stuff 
} 


- (void)addPageControllerViewControllers 
{ 
    SkiSubViewController *viewController = [self viewControllerAtIndex:0]; 

    if(self.skiDataArray) 
    { 
     viewController.skiData = self.skiDataArray[0]; 
    } 

    [self.pageController setViewControllers:@[viewController] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 
} 

- (void)addPageControllerView 
{ 
    self.pageController.view.translatesAutoresizingMaskIntoConstraints = NO; // avoids conflicts with auto generated constraints 
    [self.pageDataView addSubview:self.pageController.view]; 

    NSDictionary *views = @{ @"subview": self.pageController.view }; 
    [self.pageDataView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[subview]|" options:0 metrics: 0 views:views]]; 
    [self.pageDataView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[subview]|" options:0 metrics: 0 views:views]]; 
    [self.pageDataView updateConstraintsIfNeeded]; 
} 

#pragma mark - uipageviewcontroller data source 

- (UIViewController*)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    NSUInteger index = [(SkiSubViewController *)viewController indexNumber]; 

    if (index == 0) 
    { 
     return nil; 
    } 
    else 
    { 
     index--; 
     return [self viewControllerAtIndex:index]; 
    } 
} 

- (UIViewController*)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    NSUInteger index = ((SkiSubViewController *)viewController).indexNumber; 
    index++; 

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

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

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

@end 

SkiSubViewController.h

@interface SkiSubViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 

@property (assign, nonatomic) NSInteger indexNumber; 
@property (strong, nonatomic) SkiData* skiData; 


@end 

SkiSubViewController.m

@interface SkiSubViewController() 

@property (weak, nonatomic) IBOutlet UILabel *label; 

@end 

@implementation SkiSubViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.label.text = [NSString stringWithFormat:@"Number %li", (long)self.indexNumber]; 
} 

@end 
+0

請證明代碼是否可能以及何時可能。我試圖把'UIPageViewController().view'作爲子視圖放在'uiviewcontroller'容器中,但它對我不起作用。謝謝 – Arsen

+0

好吧,我已經添加了一些代碼 – donmarkusi

+0

你能否提供一個快速的例子。我無法在任何地方找到一個。 – Xitcod13