2012-03-22 13 views
3

次のコードを使用してsplitviewcontrollerのRootViewcontrollerからviewcontrollerを表示するために使用します。 iOS 5.1ポートレイトモードでは表示されません。ランドスケープすると、Rootviewコントローラの中にコントローラが表示されます。 iOS 5.0までうまく動作します。私はself.splitviewcontrollerを使用して、代わりに自己のdetailviewcontrollerインスタンスを使用iOS 5.1 UISplitviewcontrollerはRootViewControllerのpresentModalViewControllerを許可していません

-(void)displayFileInReader:(NSURL *)fileURL { 

    SPDocumentReader *objiPadDocumentReader = [[SPDocumentReader alloc] init]; 
    objiPadDocumentReader.readerType = ReaderTypeLocalCachedDocument; 
    objiPadDocumentReader.url = fileURL; 
    UINavigationController *objNavigationController = [[UINavigationController alloc] initWithRootViewController:objiPadDocumentReader]; 
    objNavigationController.navigationBar.barStyle = UIBarStyleBlack; 

    [self presentModalViewController:objNavigationController animated:YES]; 

    [objNavigationController release]; 
    objNavigationController = nil; 

    [objiPadDocumentReader release]; 
    objiPadDocumentReader = nil; 
} 

しかし、この場合、detailviewコントローラをクリックしてrootviewcontrollerを却下/削除すると、「ビューのないウィンドウ」のようなクラッシュが発生します。

また、iOS 5.1ではRootViewの表示が間違っていることがあります。最後に、事前

答えて

5

おかげで私は問題が分割表示に起因するかもしれないと思う

は、我々はビューを提示しようとすると、ルートビューコントローラを閉じることができませんでした、解決策を見つけましたそれ以上のコントローラ。 私はここでは、この

-(void)displayFileInReader:(NSURL *)fileURL 
{ 
    SPDocumentReader *objiPadDocumentReader = [[SPDocumentReader alloc] init]; 
    objiPadDocumentReader.readerType = ReaderTypeLocalCachedDocument; 
    objiPadDocumentReader.url = fileURL; 
    UINavigationController *objNavigationController = [[UINavigationController alloc] initWithRootViewController:objiPadDocumentReader]; 
    objNavigationController.navigationBar.barStyle = UIBarStyleBlack; 

    //to dismiss the splitview popover -to solve iOS5.1 splitview issue. 
    [self.delegate dismissSplitViewPopOverController]; 

    [self presentModalViewController:objNavigationController animated:YES]; 

    [objNavigationController release]; 
    objNavigationController = nil; 

    [objiPadDocumentReader release]; 
    objiPadDocumentReader = nil; 
} 

のように上記の機能を変更し、私は私が分割ビューのポップオーバーを見つけることができ、スプリットビューデリゲートを貼り付けました。

#pragma mark - UISplitView delegate 

// Called when rotating to a portrait orientation. 
- (void)splitViewController: (UISplitViewController*)svc 
    willHideViewController:(UIViewController *)aViewController 
      withBarButtonItem:(UIBarButtonItem*)barButtonItem 
     forPopoverController: (UIPopoverController*)pc { 

    barButtonItem.title = SPLocaleString(@"[Navigator]"); 
    self.navigationItem.leftBarButtonItem = barButtonItem; 

    splitPopoverController = pc; 
    [splitPopoverController retain]; 
} 

// Called when the view is shown again in the split view, invalidating the button and popover controller. 
- (void)splitViewController: (UISplitViewController*)svc 
    willShowViewController:(UIViewController *)aViewController 
    invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem { 

    self.navigationItem.leftBarButtonItem = nil; 

    [splitPopoverController release]; 
    splitPopoverController = nil; 
} 

-(void)splitViewController:(UISplitViewController *)svc 
     popoverController:(UIPopoverController *)pc 
willPresentViewController:(UIViewController *)aViewController 
{ 
    if (splitPopoverController) 
    { 
     [splitPopoverController release]; 
     splitPopoverController = nil; 
    } 

    splitPopoverController = pc; 
    [splitPopoverController retain]; 
} 

- (void)dismissSplitViewPopOverController { 
    // If a popover controller is visible, hide it 
    if (splitPopoverController) { 
     [splitPopoverController dismissPopoverAnimated:NO]; 
     [splitPopoverController release]; 
     splitPopoverController = nil; 
    } 
} 

感謝の神、

1

は私がsolution by NaveenShanに5.1のおかげで、この問題を解決することができましたが、私は必要なだけの行はpresentModalViewControllerを呼び出す前に[popoverController dismissPopoverAnimated:NO];を呼び出すことでした。

関連する問題