我正在尝试在我的项目中实现页面滚动功能。我为iOS 5开发了故事板(和ARC)。这就是我在故事板中所做的:
第一个viewController(左侧)有一个scrollView和一个pageControl。它的类名为GlobalDashboardViewController
,继承自类DashboardViewController
(继承自UIViewController
)。其他2个控制器是简单的UIViewControllers,带有标识符( MainDashboard 和 SecondaryDashboard )。
在GlobalDashboardViewController.m
中,只有一个viewDidLoad,它获取了childViewControllers:
- (void)viewDidLoad
{
[super viewDidLoad];
[self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"MainDashboard"]];
[self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"SecondaryDashboard"]];
}
DashboardViewController.m
有点复杂。以下是最重要的方法:
- (void)viewDidLoad
{
// Calling the viewDidLoad above to populate the childViewControllers array
[super viewDidLoad];
[self.scrollView setPagingEnabled:YES];
[self.scrollView setScrollEnabled:YES];
[self.scrollView setShowsHorizontalScrollIndicator:NO];
[self.scrollView setShowsVerticalScrollIndicator:NO];
[self.scrollView setDelegate:self];
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.pageControl.currentPage = 0;
_page = 0;
[self.pageControl setNumberOfPages:[self.childViewControllers count]];
UIViewController *viewController = [self.childViewControllers objectAtIndex:self.pageControl.currentPage];
if (viewController.view.superview != nil) {
[viewController viewWillAppear:animated];
}
self.scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * [self.childViewControllers count], scrollView.frame.size.height);
}
还有很多其他方法,但我不认为它们是相关的,因为这是我的问题:应用程序启动,我看到scrollView和pageControl。背景是深灰色,因为我在 GlobalDashboard viewController中设置它。我可以正确滚动,并更新pageControl。但我没有看到其他观点。当我在viewWillAppear
中的 处放置断点,并查看viewController
时,它的名称正确(Dashboard Page 1
,这是我给控制器的名称在故事板中),但其_view
属性显示 0x00000000 ,如您所见:
所以,我从来没有进入 if ,这是实际显示viewControllers的一些神奇之处......
我的工作基于您可以在此处找到的示例项目:PageViewController。当我运行它时,它完美地运行。我不知道为什么我不能在我自己的项目中使它工作。
有什么想法吗?
由于
答案 0 :(得分:1)
您永远不会添加视图本身([self.view addSubview:/*Your child controller's view*/]
)。您链接到的项目在PagerViewController.m
- (void)loadScrollViewWithPage:(int)page
中完成