Контроллер iOS 5.1 для ULplitview не позволяет использовать presentModalViewController из RootViewController - PullRequest
3 голосов
/ 22 марта 2012

Я использую для отображения viewcontroller из RootViewcontroller splitviewcontroller, используя следующий код. В портретном режиме iOS 5.1 ничего не отображается. когда ландшафт, он показывает контроллер внутри контроллера Rootview. Работает нормально до 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 instance вместо self.

Но в этом случае, когда мы нажимаем o контроллер подробных сведений, чтобы закрыть / удалить rootviewcontroller, происходит сбой, говорящий что-то вроде «нет окна для представления».

Также иногда в iOS 5.1 RootView отображается в неправильной ориентации.

заранее спасибо

Ответы [ 2 ]

5 голосов
/ 14 мая 2012

Наконец-то я нашел решение,

Я думаю, что проблема может заключаться в том, что разделенное представление не может закрыть контроллер корневого представления, когда мы пытаемся представить контроллер представления поверх него.Я изменил вышеупомянутую функцию следующим образом:

-(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 голос
/ 30 октября 2012

Я смог решить эту проблему в 5.1 благодаря решению от NaveenShan , но единственная нужная мне линия была для вызова [popoverController dismissPopoverAnimated:NO]; перед вызовом presentModalViewController.

...