0

ストーリーボードと ARC を使用して、ページベースの iPhone アプリを構築しています。RootViewController クラスの関数を使用して、DataViewController クラスの関数内から特定のページに切り替えようとしています。

問題は、DataViewController クラスのメイン インスタンスが RootViewController クラス内に見つからず、ModelController クラス内にあることです。また、ModelController クラスは読み取り専用のようです (そのため、RootViewController クラスなどの外部クラスから ModelController のデリゲートを設定することはできません)。

私の最初の計画は次のとおりでした。

1) RootViewController クラスから ModelController デリゲートを RootViewController に設定します。

2) DataViewController デリゲートを ModelController のデリゲートに設定します。

しかし、それは機能していないようです-ModelControllerクラスの読み取り専用性が原因だと思います...

この場合、DataViewController クラスから RootViewController クラスの関数を使用するにはどうすればよいですか? デリゲートを設定するよりも、これを達成するためのより良い方法はありますか?

4

1 に答える 1

2

私がこれを行った方法は、通知を使用することでした

DataViewController のボタンクリックで通知を追加しました

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

そして、viewDidLoad の RootViewController で

[[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];
}

}

デリゲートも使用してみましたが、デリゲートを失い続けたため、コードが乱雑になっていることがわかりました。

于 2013-05-08T07:37:50.560 に答える