はrootviewcontrollerdelegate定義である
@protocolのRootViewControllerViewDelegate
- (ボイド)toggleView:(のUIViewController )newControllerのViewController:(のUIViewController)oldController。
@end
toggleView
に可能な実装
-(void)toggleView:(UIViewController *)newController viewController:(UIViewController*)oldController {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[UIView setAnimationTransition:([oldController.view superview] ? UIViewAnimationTransitionFlipFromLeft : UIViewAnimationTransitionFlipFromLeft) forView:self.view cache:YES];
[newController viewWillAppear:YES];
[oldController viewWillDisappear:YES];
[oldController.view removeFromSuperview];
[self.view addSubview:newController.view];
[oldController viewDidDisappear:YES];
[newController viewDidAppear:YES];
[UIView commitAnimations];
[oldController release];
}
これは、あなたがどこか新しいRootViewControllerを作成する必要がありますビュー明らか
を反転させることにより、View Controllerを強打し、そのビューから開始します(アプリデリゲートになる可能性があります)
あなたはViewControllerを、それがプロトコルに準拠しなければならないRootViewControllerを使用することができるようにしたい場合は
は今、あなたがそう
@interface MyViewController : UIViewController <RootViewControllerDelegate> {
id delegate;
}@property(assign) id <RootViewControllerViewDelegate> delegate;
のようにそのクラスのインターフェイスでそれを宣言する今、あなたはのためのビューを交換するために、デリゲートメソッドを使用することができますもう一つはすべてが正しく初期化されているということです。 2つのコントローラのビューを交換するためのコードは、この
NewViewController *viewController=...
//you can set up your viewControllers data here if you need to
//Since its probable that this view has that data it can just set it instead of
//delegating
viewController.delegate=delegate; //setting up the RootViewController reference
[delegate toggleView:viewController viewController:self];
のようになります。あなたはそのコントローラへのすべての参照を失うため、youllのは、リークを取得いけない場合、古いのViewControllerを解放するためにコールバックtoggleViewに覚えています。
これは私がそれをやっている方法です。私はXcodeにいくつか問題がありますので、今解決しました。私はスタービューと自分の作成したビューを超えて移動することができます。私はいくつかの不思議なやり方で、xibを作成して渡す必要があると思っていました(そして、そのようにして、前と同じようにテーブルを作成することができませんでした)。しかし、あなたは私を軌道に乗せました。 – mslot