【发布时间】:2014-04-25 19:45:14
【问题描述】:
最近我编写了这个关于 UIPageViewController 的小教程: http://www.appcoda.com/uipageviewcontroller-tutorial-intro/
完成本教程后,我想知道是否可以将页面指示器的位置更改为屏幕顶部。
有人知道怎么做吗?
编辑
感谢您迄今为止的帮助。我关注了这篇文章: How to put the UIPageControl element on top of the sliding pages within a UIPageViewController?
现在我在顶部有页面控制,但是发生了一些奇怪的事情: 如果您从第 1 页滑动到第 2 页,则指示器指示用户在第 3 页。 我输入了一个 NSLog,它显示了当前的索引,当从 0 到 1 再到 2 滑动到下一页时,它会发生变化。
有人知道为什么吗?
当前代码:
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;
@end
@implementation APPViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
self.pageController.dataSource = self;
[[self.pageController view] setFrame:[[self view] bounds]];
APPChildViewController *initialViewController = [self viewControllerAtIndex:0];
NSArray *viewControllers = [NSArray arrayWithObject:initialViewController];
[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self addChildViewController:self.pageController];
[[self view] addSubview:[self.pageController view]];
[self.pageController didMoveToParentViewController:self];
UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor orangeColor];
[self.view bringSubviewToFront:self.pageControl];
//Or whatever number of viewcontrollers you have
[self.pageControl setNumberOfPages:5];
}
- (APPChildViewController *)viewControllerAtIndex:(NSUInteger)index {
APPChildViewController *childViewController = [[APPChildViewController alloc] initWithNibName:@"APPChildViewController" bundle:nil];
childViewController.index = index;
return childViewController;
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
NSUInteger index = [(APPChildViewController *)viewController index];
if (index == 0) {
return nil;
}
// Decrease the index by 1 to return
index--;
[self.pageControl setCurrentPage:index];
return [self viewControllerAtIndex:index];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
NSUInteger index = [(APPChildViewController *)viewController index];
index++;
[self.pageControl setCurrentPage:index];
if (index == 5) {
return nil;
}
return [self viewControllerAtIndex:index];
}
AppChildViewController:
@property (assign, nonatomic) NSInteger index;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
switch(self.index)
{
case zero: {
self.imageView.image = [UIImage imageNamed:@"page1.png"];
NSLog(@"%d",self.index);
break;
}
case one: {
self.imageView.image = [UIImage imageNamed:@"page2.png"];
NSLog(@"%d",self.index);
break;
}
case two: {
self.imageView.image = [UIImage imageNamed:@"page3.png"];
NSLog(@"%d",self.index);
break;
}
case three: {
self.imageView.image = [UIImage imageNamed:@"page4.png"];
NSLog(@"%d",self.index);
break;
}
default: {
self.imageView.image = [UIImage imageNamed:@"page5.png"];
NSLog(@"%d",self.index);
break;
}
}
}
【问题讨论】:
-
这是同一问题的答案:stackoverflow.com/a/21048603/3532040
-
我用这个stackoverflow.com/questions/21073891/…把它放在上面
-
嗨,我认为你能做的最好的事情是创建一个新问题或更改问题的标题?
-
您是否解决了索引页面的问题?我的自定义页面指示器也遇到了同样的问题。即使我遵循了几个教程中提供的示例。
-
假设你的参数 viewControllerAfterViewController 是下一个视图控制器并且你的索引是 0,viewControllerAfterViewController 的索引应该是 1,如果你在索引中添加另一个 1 (
index++),它将是 2跨度>
标签: ios objective-c uipageviewcontroller