2012-10-22 15 views
11

私は、私たちのアプリのiOS版で働くAndroid開発者です。私はAndroid上でstartActivityForResultと同様の動作を達成する方法を知る必要があります。新しいView Controllerを表示し、新しいView Controllerが閉じられたときに前のView Controllerに制御を戻す必要があります。また、その時に呼び出されるコールバックメソッドが必要です。iOS:AndroidのstartActivityForResultのような動作を実現する方法

これをiOSでどのように達成できますか?

答えて

11

いくつかの方法がありますので、主にさまざまなパターンでこれを行います。次のようにして、アプリデリゲートにナビゲーションコントローラを設定することができます。

self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 
self.navigationController = [[ UINavigationController alloc ] initWithRootViewController:self.viewController ]; 
self.window.rootViewController = self.navigationController; 
[self.window makeKeyAndVisible]; 

その後、あなたはこれを行うことができ、新たなVCを提示したいとき:

OtherViewController *ovc = [[ OtherViewController alloc ] initWithNibName:@"OtherViewController" bundle:nil ]; 
[ self.navigationController pushViewController:ovc animated:YES ]; 

を戻るには、この操作を行います。

:限りコールバックは、これを行うための一つの方法は、あなたのプロジェクトでは、このどこかのようなプロトコルを作ることです行くよう
[ self.navigationController popViewControllerAnimated:YES ]; 

その後、とき

OtherViewController *ovc = [[ OtherViewController alloc ] initWithNibName:@"OtherViewController" bundle:nil ]; 
    ovc.delegate = self; 
    [ self.navigationController pushViewController:ovc animated:YES ]; 

:あなたは新しいVCがデリゲートとして割り当てる提示したときに最後に

@interface OtherViewController : UIViewController <AbstractViewControllerDelegate> 

@property (nonatomic, assign) id<AbstractViewControllerDelegate> delegate; 

@end 

は、その後、あなたがコールバックが別名デリゲートでトリガしたい各ビューコントローラを作りますあなたはovcを却下し、この電話をしてください。

[self.delegate abstractViewControllerDone]; 
[ self.navigationController popViewControllerAnimated:YES ]; 

そして、プロトコルに準拠したrootVCあなたはちょうどこのメソッドを記入してください:

-(void) abstractViewControllerDone { 

} 

あなたはちょうど呼び出しました。これには多くの設定が必要ですが、NSNotificationsとブロックを調べることもできます。

+1

Android Rocks、iOS Sucks! (私の上司にこのコメントXDが表示されないことを願っています)最後に、iOSよりもAndroidで実装する方がはるかに簡単なものが表示されます:D –

+0

そうですが、 –

0

通常UINavigationControllerを使用してviewControllersのチェーンを囲むことができます。 viewControllersの間を行き来することができます。コールバックの場合は、viewWillDissapear:デリゲートメソッドを2番目のビューコントローラで使用し、そこから何らかのアクションを実行できます。

1

自分のアプリケーションからアクティビティを開きたいと思えば、それは簡単です。アンドロイド活動は、ビューコントローラ(UIViewController)によって表現することができます。

iOSとAndroidのアーキテクチャは非常に異なります。 Androidのアクティビティは独立しており、iOSのコントローラはアプリケーション内で密接に接続されています。コントローラを画面に表示する方法(通常はUINavigationControllerを使用するか、またはpresentViewController:animated:を使用してモーダルに表示する)を決定し、それを何らかの方法で親コントローラに接続して結果を受信する必要があります。デリゲートパターンがこれに最も適しています。

他のアプリケーションで定義されたアクティビティを開始する、またはシステムアクティビティを開始する(カメラの写真を撮るなど)場合は、あらかじめ定義されたコントローラ(UIImagePickerControllerなど)を使用する必要があります。iOSでは、単にAndroidと同じ方法で異なるアプリケーションのコントローラを使用することはできません。

もう1つお勧めします。AndroidデザインパターンのiOSアプリを作成しないでください。 iOS上で一般的なことを考え、そのようにUIを実装します。 Androidコードをコピーするだけではありません。

関連する問題