2013-03-07 26 views
0

我使用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]; 

回答

1

我这里 https://stackoverflow.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更干净。

+0

谢谢,我结束了使用委托。不知道在撰写本文时是什么。我想这个解决方案也可以工作。 – 2013-05-21 13:19:36

相关问题