0

私は本のようにiPadでビューを表示しています.1つのビューは2つのビューを示しています. ビューを反転すると、3 番目と 4 番目のビューがさらに表示されるように、さらにビューを追加したいと考えています。そのために以下のコードを使用しています。ViewControllers を配列に追加していますが、この行の方向メソッドで強制終了されました "ContentViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0];".

- (void)viewDidLoad
{
[super viewDidLoad];

//Instantiate the model array
self.modelArray = [[NSMutableArray alloc] init];
for (int index = 1; index <= 12 ; index++)
{
    [self.modelArray addObject:[NSString stringWithFormat:@"Page %d",index]];
}

//Step 1
//Instantiate the UIPageViewController.
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl 
                                                          navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];

//Step 2:
//Assign the delegate and datasource as self.
self.pageViewController.delegate = self;
self.pageViewController.dataSource = self;

//Step 3:
//Set the initial view controllers.

ViewOne *one = [[ViewOne alloc]initWithNibName:@"ViewOne" bundle:nil];
viewTwo *two = [[viewTwo alloc]initWithNibName:@"ViewTwo" bundle:nil];

ContentViewController *contentViewController = [[ContentViewController alloc] initWithNibName:@"ContentViewController" bundle:nil];
contentViewController.labelContents = [self.modelArray objectAtIndex:0];

// NSArray *viewControllers = [NSArray arrayWithObject:contentViewController];
 viewControllers = [NSArray arrayWithObjects:contentViewController,one,two,nil];

[self.pageViewController setViewControllers:viewControllers
                                  direction:UIPageViewControllerNavigationDirectionForward
                                   animated:NO 
                                 completion:nil];



//Step 4:
//ViewController containment steps
//Add the pageViewController as the childViewController
[self addChildViewController:self.pageViewController];

//Add the view of the pageViewController to the current view
[self.view addSubview:self.pageViewController.view];

//Call didMoveToParentViewController: of the childViewController, the UIPageViewController instance in our case.
[self.pageViewController didMoveToParentViewController:self];    

//Step 5:
// set the pageViewController's frame as an inset rect.
CGRect pageViewRect = self.view.bounds;
pageViewRect = CGRectInset(pageViewRect, 40.0, 40.0);
self.pageViewController.view.frame = pageViewRect;

//Step 6:
//Assign the gestureRecognizers property of our pageViewController to our view's gestureRecognizers property.
self.view.gestureRecognizers = self.pageViewController.gestureRecognizers;

}

 - (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController
               spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation
 {
if(UIInterfaceOrientationIsPortrait(orientation))
{
    //Set the array with only 1 view controller
    UIViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
    NSArray *viewControllers = [NSArray arrayWithObject:currentViewController];
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];

    //Important- Set the doubleSided property to NO.
    self.pageViewController.doubleSided = NO;
    //Return the spine location
    return UIPageViewControllerSpineLocationMin;
}
else
{


   // NSArray *viewControllers = nil;

    ContentViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0];

    NSUInteger currentIndex = [self.modelArray indexOfObject:[(ContentViewController *)currentViewController labelContents]];
    if(currentIndex == 0 || currentIndex %2 == 0)
    {
        UIViewController *nextViewController = [self pageViewController:self.pageViewController viewControllerAfterViewController:currentViewController];
        viewControllers = [NSArray arrayWithObjects:currentViewController, nextViewController, nil];
    }
    else
    {
        UIViewController *previousViewController = [self pageViewController:self.pageViewController viewControllerBeforeViewController:currentViewController];
        viewControllers = [NSArray arrayWithObjects:previousViewController, currentViewController, nil];
    }
    //Now, set the viewControllers property of UIPageViewController
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];

    return UIPageViewControllerSpineLocationMid;
}
}
4

1 に答える 1

0

最初に、必要なすべてのビュー コントローラーでのviewControllersプロパティを設定することはできません。UIPageViewController

データ ソースに対して次のメソッドを実装する必要があります:- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewControllerおよび- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController。これにより、ページを変更するときに表示するビュー コントローラーが提供されます。表示するページがなくなったら、nil を返さなければなりません。

したがって、プロパティに 3 つの要素をviewDidLoad設定viewControllersする場合は、一度に 2 つのページしか表示できないため、実際には 2 つだけに設定する必要があります。

于 2012-12-16T02:27:48.730 に答える