在iOS8中使用splitViewController:willChangeToDisplayMode:时如何显示BarButtonim

在iOS8中使用splitViewController:willChangeToDisplayMode:时如何显示BarButtonim,ios,objective-c,ios8,uisplitviewcontroller,Ios,Objective C,Ios8,Uisplitviewcontroller,我的应用程序的结构如下所示: UISplitViewController: the master:NavigationController1->UITableViewController the detail:NavigationController2->UIWebViewController 我想在iPad上以人像模式观看时展示巴布顿风格 我知道如何通过willHideViewController在iOS7中实现它: -(void)splitViewController:(U

我的应用程序的结构如下所示:

UISplitViewController:

the master:NavigationController1->UITableViewController

the detail:NavigationController2->UIWebViewController
我想在iPad上以人像模式观看时展示巴布顿风格 我知道如何通过willHideViewController在iOS7中实现它:

-(void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc{
        barButtonItem.title = @"Course";
        self.navigationItem.leftBarButtonItem = barButtonItem;
}

-(void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem{
    if (barButtonItem == self.navigationItem.leftBarButtonItem) {
         self.navigationItem.leftBarButtonItem = nil;
    }
}
但是,iOS 8中不推荐使用此方法,我尝试使用:

-(void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode{
    if (displayMode == UISplitViewControllerDisplayModePrimaryHidden) {
        self.navigationItem.leftBarButtonItem = svc.displayModeButtonItem;
    }else{
        self.navigationItem.leftBarButtonItem = nil;
    }
}
此方法仅在显示模式更改时有效,但在应用程序首次以纵向启动时无效。
因此,如何在首次以纵向方向加载应用程序时显示BarButtonim。

当视图控制器显示时,您可以添加条形按钮:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if (self.splitViewController.displayMode == UISplitViewControllerDisplayModePrimaryHidden)
    {
        UIBarButtonItem *barButtonItem = self.splitViewController.displayModeButtonItem;
        barButtonItem.title = @"Show master";
        self.navigationItem.leftBarButtonItem = barButtonItem;
    }
}

这只会在主控当前隐藏时添加按钮。

谢谢,它可以工作,但有一个符号“@gao6708我发现最好的解决方案是,如果你在导航栏中添加你自己的uibarbuttonite。请看:这是Swift,但您应该能够轻松地翻译它。请记住在
splitViewController:willChangeToDisplayMode:
中设置相同的按钮,谢谢,获取它<代码>self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@“课程”样式:self.splitViewController.displayModeButtonItem.style目标:self.splitViewController.displayModeButtonItem.target操作:self.splitViewController.displayModeButtonItem.action]
-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];

    if (self.splitViewController.displayMode == UISplitViewControllerDisplayModePrimaryHidden){
        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Course" style:self.splitViewController.displayModeButtonItem.style target:self.splitViewController.displayModeButtonItem.target action:self.splitViewController.displayModeButtonItem.action];
    }
}

-(void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode{
    if (displayMode == UISplitViewControllerDisplayModePrimaryHidden) {
        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Course" style:svc.displayModeButtonItem.style target:svc.displayModeButtonItem.target action:svc.displayModeButtonItem.action];
    }else{
        self.navigationItem.leftBarButtonItem = nil;
    }
}