22

可視のView Controllerビューが何であるかを知らなくても、View Controllerをモーダルに表示する方法はありますか? 基本的には、任意の時点でアラート ビューを表示するようなものです。

私は次のようなことができるようにしたいと思います:

MyViewController *myVC = [[MyViewController alloc] init];
[myVC showModally];

アプリのどこからでもこれを呼び出して、一番上に表示できるようにしたいと思います。現在のView Controllerが何であるかは気にしたくありません。

これを使用してログインプロンプトを表示する予定です。アラート ビューを使用したくありません。また、アプリ全体でログイン プレゼンテーション コードを使用したくありません。

これについて何か考えはありますか?それとも、これを達成するためのより良い方法がありますか? 独自のメカニズムを実装して、ウィンドウの上にビューを配置する必要がありますか?

4

5 に答える 5

7

このコードをアプリ デリゲートに実装できます。

AppDelegate.m

-(void)presentViewControllerFromVisibleController:(UIViewController *)toPresent
{
    UIViewController *vc = self.window.rootViewController;
    [vc presentViewController:toPresent animated:YES];
}

AppDelegate.h

-(void)presentViewControllerFromVisibleViewController:(UIViewController *)toPresent;

どこからでも

#import "AppDelegate.h"
...
AppDelegate *delegate = [UIApplication sharedApplication].delegate;
[delegate presentViewControllerFromVisibleViewController:myViewControllerToPresent];

デリゲートでは、 の を取得していrootViewControllerますwindow。これは常に表示されます。すべての「親」コントローラーです。

于 2013-04-12T01:17:43.293 に答える
2

どのView Controllerが表示されているかを必ずしも知る必要はないと思います。アプリケーションの にアクセスしてkeyWindow、モーダル ビュー コントローラーのビューをビューのリストの一番上に追加できます。次に、のように機能させることができますUIAlertView

インターフェイス ファイル: MyModalViewController.h

#import <UIKit/UIKit.h>

@interface MyModalViewController : UIViewController
- (void) show;
@end

実装ファイル: MyModalViewController.m

#import "MyModalViewController.h"


@implementation MyModalViewController

- (void) show {
    UIWindow *window = [[UIApplication sharedApplication] keyWindow];
    //  Configure the frame of your modal's view.
    [window addSubview: self.view];
}

@end
于 2013-04-12T01:43:59.480 に答える