在纵向模式下按下新视图控制器后,iOS UISplitViewController的Popover控制器按钮消失

Azu*_*Azu 7 objective-c ipad ios

在我的UISplitViewController应用程序中,我有

  • RootViewController - 左窗格中的视图控制器.
  • DetailViewController - 右窗格中的视图控制器.

当点击RootViewController中的一个项目(在UITableView中)时,将设置新的视图控制器,如下所示:

[detailViewController setViewControllers:[NSArray arrayWithObjects:newViewController, nil] animated:animated];

//detailPane is my DetailViewController

一切都在横向模式下很好用.但是,我无法使UISplitViewController在纵向模式下工作,也就是说,当我在portait模式下启动并使用应用程序时,RootViewController的弹出按钮在我的DetailViewController中不能正确显示.

当我以纵向模式启动应用程序时,弹出按钮会正确显示.但是在弹出窗口中的一个项目并且在detailViewController上设置了新的视图控制器之后,该按钮消失了.我必须将设备旋转到横向,然后再次回到纵向以使按钮再次出现.

我在我的应用程序的AppDelegate中设置了我的UISplitViewController的委托,如下所示:

self.splitViewController.delegate = self.detailViewController

这是我的UISplitViewControllerDelegate实现

- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem  forPopoverController: (UIPopoverController*)pc {
    NSLog(@"Will hide view controller");
    barButtonItem.title = @"Menu";
    [self.navigationItem setLeftBarButtonItem:barButtonItem];
    self.popoverController = pc;
}

- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
    NSLog(@"Will show view controller")
    NSMutableArray *items = [self.navigationItem.leftBarButtonItems mutableCopy];
    [items removeAllObjects];
    [self.navigationItem setLeftBarButtonItems:items animated:YES];
    [items release];
    self.popoverController = nil;   
}
Run Code Online (Sandbox Code Playgroud)

非常感谢任何提示或帮助.谢谢.

Nek*_*kto 0

当您设置放置在 上的新视图控制器时navigation stack,可能所有导航按钮都会重置。更改后您可以手动添加适当的按钮navigation stack

例如,您可以从- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc创建默认弹出框控制器按钮的位置选择代码:

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"Menu" style:UIBarButtonItemStyleBordered target:self action:@selector(appropriateSelector)];
[self.navigationItem setLeftBarButtonItem:barButtonItem];
self.popoverController = pc;
Run Code Online (Sandbox Code Playgroud)