0

presentModalViewControllerを使用して、他のいくつかのビューの上にUIViewを表示しようとしています。controller1からpresentModalViewControllerを呼び出します。controller2からのビューを表示しようとしています。

controller1から、controller2を次のように呼び出します。

- (void) someButtonPressed: (id)sender
{
    MyController* controller2 = [ [ MyController alloc ] initWithNibName:nil bundle:nil ];

    [self presentModalViewController:controller2 animated:YES];
    //[self presentViewController:controller2 animated:NO completion:nil ];
}

次に、controller2でこれを行います。

- (void)viewDidLoad
{
    [super viewDidLoad];
    if (YES){

        UIWindow* keyWindow = [[UIApplication sharedApplication] keyWindow];
        UIView* master = (UIView*)[keyWindow viewWithTag:100]; // Master is the entire app, but always oriented so top left corner is 0,0.

        UIView* newView = [ [ UIView alloc ] initWithFrame:CGRectMake(100, 100, 400, 400) ];

        [self setView:newView ];

        self.view.backgroundColor = [ UIColor clearColor ];
    }

}

問題は、最初のコントローラーのコンテンツがどれも透けて見えないことです。以前のビューを表示したままにします。2番目のコントローラーからのビューを非表示にする方法はありますか?これを実行する理由は、2番目のコントローラー/ビューに、コントローラー1によって管理されるビューに到達することなく、すべてのタッチイベントをキャッチする透明なレイヤーを表示するためです。

どうもありがとう。

4

1 に答える 1

0

ビューをサブビューとして追加します。これは機能します。

- (void) someButtonPressed: (id)sender
{
    MyController* controller2 = [ [ MyController alloc ] initWithNibName:nil bundle:nil ];

    [[self view] addSubview:[controller2 view]];
    // [controller2 release] if you aren't using ARC

    //[self presentModalViewController:controller2 animated:YES];
    //[self presentViewController:controller2 animated:NO completion:nil ];
}

controller2でviewDidAppearを使用している場合は、次の行をaddSubView行の後に配置します。

[controller2 viewDidAppear:NO]

同じことが他のviewDidメソッドにも当てはまります;)

于 2012-05-23T07:14:41.877 に答える