1

Split View Controller を使用しており、マスター ペインでボタンをタップするとモーダル ウィンドウが表示されます。ユーザーがウィンドウの境界の外をタップしたときに、ウィンドウを閉じることができるようにする必要があります。

現在、私が読んだpresentViewControllerを使用していますが、ウィンドウの外側をタップすることはできません。

ビューコントローラーを自分で提示し、そこからの閉鎖を処理するためにジェスチャー認識エンジンをセットアップする必要があると思います...問題は、ビューコントローラーをどこに/どのように提示するか、またはジェスチャー認識エンジンをどこに接続するかがわからないことですSVC。

ビューコントローラーを次のようにセットアップします。

SearchViewController *searchViewController = [[SearchViewController alloc] initWithStyle:UITableViewStylePlain];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:searchViewController];

[navController setNavigationBarHidden:NO]; 

そこから、presentViewControllerを使用せずにView Controllerを表示する方法がわかりません。私は次のことを試しました(それぞれ個別に):

[[self navigationController] addChildViewController:navController];

[self.view.window.rootViewController addChildViewController:navController];

[self.presentingViewController addChildViewController:navController];

[self.presentingViewController.presentingViewController addChildViewController:navController];

navcontroller を表示するにはどうすればよいですか? また、どのビューにジェスチャ レコグナイザーを追加しますか?

4

1 に答える 1

2

UIPopoverViewController が機能します。

または、子ビュー コントローラーを RootViewController に追加することもできます。. (ライフサイクル処理については、UIViewController の内容を確認してください)。

基本的に、ルートビューコントローラーでこれだけです:

- (void) presentSemiModalViewController 
{
   //Tint-out the background or blur it with some effect        

    _semiModalViewController = viewController;
    //Choose the frame you'd like to use here, and an animation you'd like to use to present it
    [self.view addSubView:_semiModalViewController.view];
    [_semiModelViewController willMoveToParentViewController self];


}

RootViewController が自分のものではない場合 (UINavigationController など)、カテゴリを使用できますが、_semiModalViewController を保持するには、連想参照を使用する必要があります (つまり、カテゴリに「プロパティ」を追加して、使用中にモーダル VC を保存します。 )。その詳細については、ここを参照してください:連想参照情報

PS: 「セミモーダル」というより適切な名前を選択することもできますが、アイデアはわかります ;)

于 2013-01-16T01:22:48.690 に答える