1

私はiPhone開発に不慣れで、本当にこれを理解しました。私はそれを愛していますが、私を悩ませていることが1つあります. ビューを切り替え続けるにはどうすればよいですか? 新しいプロジェクトを作成するときに与えられた最初のビューから作成したビューに移動する方法は知っていますが、この 2 つのウィンドウを渡すにはどうすればよいでしょうか? 作成したビューにアクセスするにはどうすればよいですか?

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

誰かが私の質問を理解してくれることを願っています。いくつかのドキュメントへのリンクは問題ありません。私はいたるところを見てきました。

4

3 に答える 3

3

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

于 2009-07-14T15:13:43.667 に答える
1

rootviewcontrollerdelegate の定義は次のとおりです。

@プロトコル RootViewControllerViewDelegate

-(void)toggleView:(UIViewController )newController viewController:(UIViewController )oldController;

@終わり

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

}

これにより、ビューを反転してView Controllerをスワイプします

明らかに、どこかに新しい RootViewController を作成し、そこにあるビューから開始する必要があります (アプリのデリゲートである可能性があります)。

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

そのコントローラーへのすべての参照を失うため、リークが発生することはありません。

于 2009-07-15T03:02:34.567 に答える
1

その特定の状況では、人々は通常 のpresentModalViewController:animated:方法を使用しUIViewControllerます。UINavigationControllerは のサブクラスUIViewControllerなので、コードは次のようになります。

UIViewController *addingViewController = [[UIViewController alloc] initWithNibName:@"AddingView" bundle:nil];
[[self navigationController] presentModalViewController:addingViewController animated:YES];
[addingViewController release];
于 2009-07-14T12:11:42.767 に答える