8

私はSDKのドキュメントが言うことを知っています

ポップオーバーのコンテンツの外側をタップすると、ポップオーバーが自動的に閉じます。

しかし、私はここの賢い人々が方法を見つけたと確信しています:)おそらく、ポップオーバーの却下機能を上書きする必要がありますか?

ありがとう

編集:ここで提案されているように passthroughViews を使用してみましたが、完全に機能します。必要な人のためのコードは次のとおりです。この例では、self.view を配列に入れています。つまり、ポップオーバーが発生したボタンの外側では、ポップオーバーを閉じるものは何もありません。

        popoverController.passthroughViews = [[[NSArray alloc] initWithObjects:self.view, nil] autorelease];
4

3 に答える 3

13

プロパティを設定する必要がありpassthroughViewsます。ドキュメントから:

ポップオーバーが表示されている間にユーザーが操作できるビューの配列。

@property (nonatomic, copy) NSArray *passthroughViews

ポップオーバーがアクティブな場合、他のビューとの対話は通常、ポップオーバーが閉じられるまで無効になります。ビューの配列をこのプロパティに割り当てると、ポップオーバーの外側のタップを対応するビューで処理できます。

ポップオーバーを閉じるだけでなく、タッチ イベントを処理するビューの配列に設定passthroughViewsします。

于 2011-03-29T18:54:08.107 に答える
7

受け入れられた回答は、「ポップオーバーの外側を押すときにポップオーバーを非表示にする方法はありますか?」という質問には実際には答えていません。それは可能なビューを提供しますが、すべての親ビューへのハックなアクセスと、画面上にあるビューの特定などを必要とする可能性があります。質問は、「ポ​​ップオーバー ビューをモーダルにするにはどうすればよいですか?」と言い換えることができます。

ポップオーバーを閉じる完了ボタンを使用して、次のようにします。

UIViewController* vc = [[[UIViewController alloc] init] autorelease];

UIBarButtonItem* doneButton = [[[UIBarButtonItem alloc] initWithTitle:@"Done"] style:UIBarButtonItemStyleDone target:self action:@selector(processDoneAction)] autorelease];

[vc.navigationItem setLeftBarButtonItem:doneButton];

vc.modalInPopover = YES;
//If you want full screen:
vc.modalPresentationStyle = UIModalPresentationFullScreen;
vc.wantsFullScreenLayout = YES;

UINavigationController* navC = [[[UINavigationController alloc] initWithRootViewController:vc] autorelease];

UIView* view = create your view

vc.view = view;

UIPopoverController* pc = [[[UIPopoverController alloc] initWithContentViewController:navC] autorelease];
pc.delegate = self;
self.popoverController = pc;

次に、processDoneAction メソッドで、ポップオーバーを閉じる必要があります。その他の考慮事項は、デバイスの向きの変更を却下して再表示することですが、以前にスタックオーバーフローで回答されているため、別の演習に任せます。

于 2011-10-14T15:46:38.417 に答える