UISplitViewController のマスター ビュー コントローラーの非表示/非表示機能を実装しようとしています。そのため、マスター ビュー コントローラーは縦向きと横向きのモードで存在する必要がありますが、特定のビュー (設定) に対してのみ存在する必要があります。それ以外の場所では、横向きにのみ表示する必要があります。
-(void)viewDidAppear:(BOOL)animated
私のMasterControllerで私は書いています
self.popoverController.delegate = self;
appDelegate.splitViewController.delegate= nil;
appDelegate.splitViewController.delegate = self;
[appDelegate.splitViewController willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
[appDelegate.splitViewController didRotateFromInterfaceOrientation:self.interfaceOrientation];
appDelegate.splitViewController.view setNeedsLayout];
デリゲートメソッドも設定
- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
return NO;
}
私がここstackoverflowで見つけたこのアプローチは本当にうまく機能しますが、デバイスを回転させる限り. 次に、マスター ビュー コントローラーが消えます (黒いスペースが残ります)。回転中に表示され、回転が完了するとすぐに消えます。さらに、外側をクリックすると、マスタービューコントローラーが完全に消えます。
そこで、次のデリゲート メソッドを実装して、ポップオーバーが消えないようにしました。
- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
return NO;
}
それも機能しますが、詳細ビューの tableView が応答しません。
UIPopoverControllerDelegate メソッドからコードを削除する-(void)viewDidAppear:(BOOL)animated
と、すべて期待どおりに機能しますが、デバイスを回転させた直後です。
だから私の質問は、誰かが私がその問題を解決する方法を知っているかどうかです. このソリューションは、iOS 5.0 以降で動作するはずです。
ご回答ありがとうございます。