从DataViewController转到UIPageViewController的页面?
问题描述:
我使用xcode中的基于页面的应用程序模板创建一个RootViewController,一个DataViewController和一个ModelController。从DataViewController转到UIPageViewController的页面?
我已经设法让它进入我需要的任何页面,从RootViewController,但我也需要从DataViewController中触发一个来自特定页面的事件。这不太好。我应该如何改变它的代码,使其从DataViewController工作?
我的代码如下所示: - 从根(工作):
//get current index of current page
DataViewController *theCurrentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
NSUInteger retreivedIndex = [self.modelController indexOfViewController:theCurrentViewController];
//get the page(s) to go to
DataViewController *targetPageViewController = [self.modelController viewControllerAtIndex:(pageToGoTo - 1) storyboard:self.storyboard];
//put it(or them if in landscape view) in an array
NSArray *theViewControllers = nil;
theViewControllers = [NSArray arrayWithObjects:targetPageViewController, nil];
//check which direction to animate page turn then turn page accordingly
if (retreivedIndex < (pageToGoTo - 1) && retreivedIndex != (pageToGoTo - 1)){
[self.pageViewController setViewControllers:theViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
}
if (retreivedIndex > (pageToGoTo - 1) && retreivedIndex != (pageToGoTo - 1)){
[self.pageViewController setViewControllers:theViewControllers direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:NULL];
}
- 从一个页面,dataviewcontroller(不工作):
DataViewController *targetPageViewController = [((UIPageViewController*)self.parentViewController) viewControllerAtIndex:(pageToGoTo - 1) storyboard:self.storyboard]; //The problem is here, but I do not know how to solve it.
//put it(or them if in landscape view) in an array
NSArray *theViewControllers = nil;
theViewControllers = [NSArray arrayWithObjects:targetPageViewController, nil];
[((UIPageViewController*)self.parentViewController) setViewControllers: theViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
答
我这里 https://*.com/a/16435166/1463518回答了这个问题
我这样做的方式是通过使用通知
我在viewDidLoad中添加按钮单击通知在DataViewController
[[NSNotificationCenter defaultCenter]postNotificationName:@"H2RAutoPage" object:nil];
而在RootViewController的
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(autoPage:) name:@"H2RAutoPage" object:nil];
我自动创建程序看起来像这样
- (void)autoPage: (NSNotification *)notification
{
//get current index of current page
NSUInteger currentPage = [self.modelController indexOfViewController:[self.pageViewController.viewControllers objectAtIndex:0]];
// this is the next page nil mean we have reach the end
H2RDataViewController *targetPageViewController = [self.modelController viewControllerAtIndex:(currentPage + 1) storyboard:self.storyboard];
if (targetPageViewController) {
//put it(or them if in landscape view) in an array
NSArray *viewControllers = [NSArray arrayWithObjects:targetPageViewController, nil];
//add page view
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
}
}
我所做的还尝试使用委托,但发现代码变得混乱,因为它不断失去委托我发现NSnotification更干净。
谢谢,我结束了使用委托。不知道在撰写本文时是什么。我想这个解决方案也可以工作。 – 2013-05-21 13:19:36