2012-04-27 6 views
1

私は、プライマリインターフェイスにUITabBarControllerを使用するiPhoneアプリケーションを持っています。このアプリケーションはまた、さまざまなタブから提示されるモーダルUINavigationControllerを大量に使用します。iPhoneアプリケーション全体で使用されるモーダルViewControllerを作成して提示する必要があります

私はモーダルに提示する必要があるViewControllerがあります。これは、アプリケーション内のさまざまな場所からトリガーできます。それを作成し、それをトリガーするすべてのviewController間で提示するコードを複製するのはひどい考えです。このコードを単一の場所に置いて、どのviewControllerから提示してもかまいません。

この集中化された場所はどこですか?私のルートViewControllerはUITabBarControllerなので、AppDelegateに表示機能を集中するのは嫌です。

答えて

1

あなたが望むビューを表示する機能を持つ新しいクラスファイルを作成します。そうすれば、モーダルビューを表示するためにコードを一度書くだけで、それを使用する必要がある各ビューは1行のコードでヘルパークラスの関数を呼び出すことができます。

@interface ApplicationHelper : NSObject { 
} 

+(void)showMyModalView:(UIViewController *)parentViewController; 

@end 

実施:各ビューコントローラのインポートApplicationHelperで次に

#import "ApplicationHelper.h" 
#import "ViewController.h" 

@implementation ApplicationHelper 

+(void)showMyModalView:(UIViewController *)parentViewController 
{ 
     ViewController *vc = [[ViewController alloc] init]; 

     [parentViewController presentModalViewController:vc animated:YES]; 
} 
@end 

とこれはあなたが別のファイルにコードを扱うすべてのビューを維持することができますshowMyModalView方法

[ApplicationHelper showMyModalView:me]; 

を呼び出しますアプリケーションデリゲートに送信します。

+0

ありがとうございます。はい、どこでも同じコードを繰り返すよりも優れています。 – Undistraction

0

1つのUIViewControllerを作成し、それに対していくつかのデリゲートメソッドを実装できます。そして、あなたはこのようなビューコントローラ提示することができます:

[currentViewController presentViewController:yourViewController animated:YES]; 

をし、イベントがあなたのビューコントローラで焼成されたとき、それは呼び出し側に委譲します。

この場合、「YourViewController」のコードは1回だけ作成し、必要な場所でコードを再利用します。また、pushviewcontrollerを使用することもできます。

[self.navigationController pushviewcontroller:yourViewController animated:YES]; 
+0

私はモーダルViewControllerを提示する方法を理解しています。私のアプリケーションを通して、単一のViewControllerへの参照を渡すことは意味がありません。 AppDelegateをグローバル変数のレジストリとして使うのも嫌です。 NSNotificationを使用してモーダルViewControllerのプレゼンテーションを単一の場所からトリガすることは、はるかに意味があります。私はちょうどその単一の場所があるべきである場所で動かすことができません。 – Undistraction

0

参照を渡したり試したりしないでください。

ちょうどalloc] init];あなたがそれを使用する必要がある新しいインスタンス。

たとえば、

MyModalViewController *controller = [[MyModalViewController alloc] init]; 
[self presentModalViewController:controller animated:YES]; 
+0

これは本当に無駄で、アプリケーション全体で不必要に重複したコードに終わってしまいます。 – Undistraction

+0

オブジェクトを作成して表示すると、それよりも簡単なのは何ですか? – trapper

関連する問題