2012-03-22 28 views
3

我使用以下代碼來顯示splitviewcontroller的RootViewcontroller的viewcontroller。它不會在iOS 5.1肖像模式下顯示任何內容。當它橫向顯示Rootview控制器內的控制器時。它的工作正常到iOS 5.0。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; 
} 

我用self.splitviewcontroller和使用detailviewcontroller實例,而不是自我。

但是在這種情況下,當我們點擊o 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

我能夠在5.1感謝解決這一問題的solution by NaveenShan,但我需要的唯一路線是調用presentModalViewController之前調用[popoverController dismissPopoverAnimated:NO];

相關問題