2012-01-08 15 views
4

私は、次のデリゲートメソッドとUISplitViewControllerDelegateですUISplitViewControllerました:UISplitViewController:ポップオーバーを表示するには?

splitViewController:willHideViewController:withBarButtonItem:forPopoverController:

のiPadを縦に開始されたとき、私は見えるようにSplitViewからポップオーバーをしたいと思います。どうやってやるの?

私は次のコードを試してみた:

- (void)splitViewController:(UISplitViewController *)svc 
    willHideViewController:(UIViewController *)aViewController 
      withBarButtonItem:(UIBarButtonItem *)barButtonItem 
     forPopoverController:(UIPopoverController *)pc 
{ 
    //setting the barButtonItem in the toolbar in the detail view. 

    [pc presentPopoverFromBarButtonItem:barButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO]; 
} 

をしかし、上記のコードは私に次のエラーを与える:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIPopoverController presentPopoverFromRect:inView:permittedArrowDirections:animated:]: Popovers cannot be presented from a view which does not have a window.'

答えて

4

が唯一の問題は、presentPopoverメソッドを呼び出すために、間違った場所、splitViewController: * WillHide * ViewController .......したがって、barButtonItemは存在しますが、画面には表示されません。私は次のコードを使用し、それは私のために働いた。 すべてのケースを扱うためには、2つの方法を使用する必要があります。

- (void)viewDidAppear:(BOOL)animated 
{ 
    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) { 
     if (self.view.window != nil) { 
      [_masterPopoverController presentPopoverFromRect:CGRectMake(0, 0, 1, 1) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO]; 
     } 
    } 
    [super viewDidAppear:animated]; 
} 

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    if (fromInterfaceOrientation == UIDeviceOrientationLandscapeLeft || fromInterfaceOrientation == UIDeviceOrientationLandscapeRight) { 
     if (self.view.window != nil) { 
      [_masterPopoverController presentPopoverFromRect:CGRectMake(0, 0, 1, 1) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO]; 
     } 
    } 
} 
+0

どこにあなたのコードでは、このコードを配置していますか?私は、私のViewControllerへのPopoverControllerポインタを処理しようとしましたが、それは、私がポップオーバーを提示したいときに、nilに変更されるようです。 – dhrm

+0

作業とテスト済みのコードで私の答えを更新しました – Darktau

+0

ありがとうございました! – dhrm

関連する問題