ibj*_*azz 3 nsarray ios5 uistoryboard uipageviewcontroller
有谁知道我为了将我自己的视图控制器手动添加到UIPageViewController方法而缺少什么?
我目前有这个,我不知道如何继续:
NSDictionary *pageViewOptions = [NSDictionary dictionaryWithObjectsAndKeys:UIPageViewControllerOptionSpineLocationKey, [NSNumber numberWithInteger:UIPageViewControllerSpineLocationMin], nil];
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:pageViewOptions];
BookViewController *pageOne = [self.storyboard instantiateViewControllerWithIdentifier:@"BookViewController"];
AnotherPage *pageTwo = [self.storyboard instantiateViewControllerWithIdentifier:@"AnotherPage"];
PageThree *pageThree = [self.storyboard instantiateViewControllerWithIdentifier:@"PageThree"];
self.pageViewController.delegate = self;
self.pageViewController.dataSource = self;
[self.pageViewController setViewControllers:[NSArray arrayWithObjects:pageOne, pageTwo, pageThree, nil] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
self.view.gestureRecognizers = self.pageViewController.gestureRecognizers;
[self.pageViewController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.我只看到RootViewController.
感谢所有喜欢提前帮助像我这样渴望新手的人.... :)
你设置它的方式并不是很UIPageViewController有效.
首先要理解的是,setViewControllers:direction:animated:completion只设置可见视图控制器,而不是设置您可能希望向用户显示的所有视图控制器.(也就是说,如果我尝试在代码中设置三个控制器的数组,我会得到一个例外.)
其次,如果您有多个可见页面(或两个,具体取决于主干位置),则必须实现UIPageViewControllerDataSource协议以提供页面视图控制器将显示的视图控制器.
这是一个简短的例子(作为子类实现UIPageViewController,但也适用于子页面视图控制器......只需替换self.dataSource = ...为myPageViewController.dataSource = ...)
@implementation MyPageViewController {
// we keep our page view controllers in an array, but we could just as easily
// instantiate them on the fly in the data source methods
NSArray *_pages;
}
- (void)setupPages {
/*
* set up three pages, each with a different background color
*/
UIViewController *a = [[UIViewController alloc] initWithNibName:nil bundle:nil];
a.view.backgroundColor = [UIColor redColor];
UIViewController *b = [[UIViewController alloc] initWithNibName:nil bundle:nil];
b.view.backgroundColor = [UIColor greenColor];
UIViewController *c = [[UIViewController alloc] initWithNibName:nil bundle:nil];
c.view.backgroundColor = [UIColor blueColor];
_pages = @[a, b, c];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self setupPages];
self.dataSource = self;
// set the initially visible page's view controller... if you don't do this
// you won't see anything.
[self setViewControllers:@[_pages[0]] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished) {
}];
}
#pragma mark - UIPageViewControllerDataSource
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
if (nil == viewController) {
return _pages[0];
}
NSInteger idx = [_pages indexOfObject:viewController];
NSParameterAssert(idx != NSNotFound);
if (idx >= [_pages count] - 1) {
// we're at the end of the _pages array
return nil;
}
// return the next page's view controller
return _pages[idx + 1];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
if (nil == viewController) {
return _pages[0];
}
NSInteger idx = [_pages indexOfObject:viewController];
NSParameterAssert(idx != NSNotFound);
if (idx <= 0) {
// we're at the end of the _pages array
return nil;
}
// return the previous page's view controller
return _pages[idx - 1];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9323 次 |
| 最近记录: |