基于分页的iPhone应用程序 - 使用DataViewController中的RootViewController函数

时间:2012-08-03 04:09:05

标签: objective-c ios uipageviewcontroller

我正在使用Storyboards和ARC构建基于页面的iPhone应用程序。我正在尝试使用RootViewController类中的函数从DataViewController类中的函数内部翻转到特定页面。

问题是在RootViewController类中找不到DataViewController类的主要实例 - 但它在ModelController类中找到。似乎ModelController类是只读的(因此我无法从外部类(如RootViewController类)设置ModelController的委托)

我最初的计划是:

1)从RootViewController类将ModelController委托设置为RootViewController

2)将DataViewController委托设置为ModelController的委托

但这似乎没有用 - 我假设由于ModelController类的只读...

在这种情况下,如何在DataViewController类的RootViewController类中使用该函数?有没有更好的方法来实现这一点,而不是设置代表?

1 个答案:

答案 0 :(得分:2)

我这样做的方法是使用通知

我在DataViewController

中点击按钮添加了通知
[[NSNotificationCenter defaultCenter]postNotificationName:@"H2RAutoPage" object:nil];

在viewDidLoad的

中的RootViewController中
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(autoPage:) name:@"H2RAutoPage" object:nil];

我的AutoPage Routine看起来像这样

- (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更清洁。