0

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

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

我最初的计划是:

1) 将 ModelController 委托设置为 RootViewController 类中的 RootViewController

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

但这似乎不起作用 - 我假设由于 ModelController 类的只读性......

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

4

1 回答 1

2

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

我在 DataViewController 中的按钮单击上添加了一个通知

[[NSNotificationCenter defaultCenter]postNotificationName:@"H2RAutoPage" object:nil];

并在 RootViewController 中的 viewDidLoad

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

我的 AutoPage 例程看起来像这样

- (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-08T07:37:50.560 回答