我正在使用Storyboards和ARC构建基于页面的iPhone应用程序。我正在尝试使用RootViewController类中的函数从DataViewController类中的函数内部翻转到特定页面。
问题是在RootViewController类中找不到DataViewController类的主要实例 - 但它在ModelController类中找到。似乎ModelController类是只读的(因此我无法从外部类(如RootViewController类)设置ModelController的委托)
我最初的计划是:
1)从RootViewController类将ModelController委托设置为RootViewController
2)将DataViewController委托设置为ModelController的委托
但这似乎没有用 - 我假设由于ModelController类的只读...
在这种情况下,如何在DataViewController类的RootViewController类中使用该函数?有没有更好的方法来实现这一点,而不是设置代表?
答案 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更清洁。