3

我使用以下代码从拆分视图控制器的 RootViewcontroller 显示视图控制器。在 iOS 5.1 纵向模式下它不会显示任何东西。当横向显示 Rootviewcontroller 内的控制器。它在 iOS 5.0 之前运行良好。

-(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 实例而不是 self。

但是在这种情况下,当我们单击 o detailview 控制器以关闭/删除 rootviewcontroller 时,它会导致崩溃,说诸如“视图没有窗口”之类的东西。

有时在 iOS 5.1 中,RootView 显示方向错误。

提前致谢

4

2 回答 2

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;
    } 
}

感谢上帝,

于 2012-05-14T10:09:55.040 回答
1

由于NaveenShan的解决方案,我能够在 5.1 中解决这个问题,但我唯一需要的就是在调用[popoverController dismissPopoverAnimated:NO];之前先调用presentModalViewController

于 2012-10-30T19:31:45.977 回答