2012-03-22 34 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];

相关问题