2009-07-14 14 views
1

iPhoneの開発に新しいImと私は本当に私にこれを取った。私はそれが大好きですが、私はそれを1つのことがあります。どのように切り替えビューを維持しますか?私は新しいプロジェクトを作成するとき、私が作ったビューに私に与えられた最初のビューから来る方法を知っていますが、この2つのウィンドウをどのように渡すのですか?作成したビューにはどのようにして到達できますか?3つ以上のビューの切り替え

私はUITableViewControllerでフィードされているNavigationControllerを持つメインウィンドウを持っているこのアプリケーションを持っています。これは私のメインメニューです。右上に「+」ボタンがあり、新しいビューが表示されますが、ここからどのように新しいビューを得ることができますか?ユーザーが追加するものを選択したときに、新しいビューをプッシュするにはどうすればよいですか?

誰かが私の質問を理解したいと思っています。いくつかのドキュメントへのリンクがうまくいくでしょう。私はどこにでも見ました。

答えて

1

この特定の状況では、人々は通常UIViewControllerpresentModalViewController:animated:メソッドを使用します。 UINavigationControllerUIViewControllerのサブクラスなので、あなたのコードは次のようになります:

UIViewController *addingViewController = [[UIViewController alloc] initWithNibName:@"AddingView" bundle:nil]; 
[[self navigationController] presentModalViewController:addingViewController animated:YES]; 
[addingViewController release]; 
+0

これは私がそれをやっている方法です。私はXcodeにいくつか問題がありますので、今解決しました。私はスタービューと自分の作成したビューを超えて移動することができます。私はいくつかの不思議なやり方で、xibを作成して渡す必要があると思っていました(そして、そのようにして、前と同じようにテーブルを作成することができませんでした)。しかし、あなたは私を軌道に乗せました。 – mslot

3

あなたはこの多くの切り抜いた方法を行うことができ、あなたはセバスチャンが言ったことを行うことができ、また、あなたの他を管理し、共通のRootViewControllerを持つことができますビューコントローラビュー。これは私がやりたいことです、私は実際にToggleViewのようなRootViewController上のプロトコルを定義します:UIViewController newController UIViewController:oldController。私は、私はこのビューから別のこのプロトコルを実装することに切り替えることができるようにするUIViewControllerを作成します。これは、通常、ボタンをクリックすると、次に表示するビューが分かっているためです。したがって、ユーザーがボタンをクリックすると、ボタンを所有するUIViewControllerで新しいViewControllerが作成され、そのビューは画面にプッシュされます。これはView Controllerでデータを設定できるため、デリゲートする必要がないためですそれを他のオブジェクトに追加するか、シングルトンを使って新しいビューでデータを取得してから、私はtoggleViewメソッドを呼び出し、ルートビューコントローラが切り替えを行います。私はこれがかなりうまく動作し、コードが関わっていることを知っています。私はいつもこれをやっていませんが、新しいビューがいつも別の特定のビューから出てくることを知っていれば(たとえば、イベントを見てそのイベントを作成するホームページ)、この場合はビューコントローラを緩く結合しますプロトコルを使用します。ここ

+0

興味深い点。私に例を教えてもらえますか?私はそれをObj-Cに入れませんが、Imはそれを好きになり始めました。 – mslot

1

は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に覚えています。

関連する問題