ios UISplitViewController问题

ios UISplitViewController问题,ios,orientation,uisplitviewcontroller,uipopovercontroller,uisplitviewdelegate,Ios,Orientation,Uisplitviewcontroller,Uipopovercontroller,Uisplitviewdelegate,我有一个应用程序,它使用UISplitViewController。我添加了它的代理,并在导航栏上指定了一个按钮,以便在应用程序处于纵向模式时,能够在弹出视图中显示主视图控制器: /* @property (strong, nonatomic) id detailItem; @property (strong, nonatomic) UIPopoverController *masterPopoverController; */ #pragma mark - Man

我有一个应用程序,它使用
UISplitViewController
。我添加了它的代理,并在导航栏上指定了一个按钮,以便在应用程序处于纵向模式时,能够在弹出视图中显示主视图控制器:

/*

   @property (strong, nonatomic) id detailItem;
   @property (strong, nonatomic) UIPopoverController *masterPopoverController;

   */
    #pragma mark - Managing the detail item

    - (void)setDetailItem:(id)newDetailItem
    {
        if (_detailItem != newDetailItem) {
            _detailItem = newDetailItem;
            // do smth
        }

        if (self.masterPopoverController != nil) {
            [self.masterPopoverController dismissPopoverAnimated:YES];
        }
    }

    #pragma mark - UISplitViewDelegate methods

    - (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController
    {

        barButtonItem.title = NSLocalizedString(@"", @"");
        UIImage *imag = [[UIImage imageNamed:@"gray_button"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 7, 0, 7)];
        UIImage *imag_pressed = [[UIImage imageNamed:@"gray_button_pressed"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 7, 0, 7)];
        UIImage *more = [UIImage imageNamed:@"shows_button_pressed.png"];

        [barButtonItem setBackgroundImage:imag forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
        [barButtonItem setBackgroundImage:imag_pressed forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
        [barButtonItem setImage:more];
        [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];
        self.masterPopoverController = popoverController;
    }

    - (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
    {
        // Called when the view is shown again in the split view, invalidating the button and popover controller.
        [self.navigationItem setLeftBarButtonItem:nil animated:YES];
        self.masterPopoverController = nil;

    }
如果在主视图控制器中选择了一个选项,则RootViewController(基本上是我的分割视图控制器的细节分割)将更改为替换类型segue。我再次分配
UISplitViewController
委托。 我的问题是,除非我将设备置于横向模式,然后返回到纵向模式,否则根目录更改后条形按钮不会显示。如果我这样做了,按钮就在那里,并且完成了它的工作

如果不将设备置于横向,然后返回到纵向,如何使按钮显示

PS:我已尝试在旧根视图控制器中的
prepareforsgue:
方法中分配新代理,并在新根视图控制器中的
视图中分配新代理将出现:
方法。同样的事情也会发生。 另一件事:新的根视图控制器实现了

更新:

我发现方法:
-(void)splitViewController:(UISplitViewController*)svc将隐藏控制器:(UIViewController*)aViewController with barbuttoneim:(uibarbuttoneim*)barbuttoneim for popcovercontroller:(uipopcovercontroller*)pc
只有在我从横向转到纵向后才会被调用,因此我需要旋转设备才能显示按钮

这两个委托之间的区别在于,第一个委托添加在旧的根视图控制器中的my
AppDelegate.m
中,第二个委托添加在
prepareForSegue:
方法中。一旦应用程序启动,就会为旧的根视图控制器调用上述方法