2015-04-16 2 views
1
структура

Мои приложения любит это:как показать barButtonItem при использовании splitViewController: willChangeToDisplayMode: в iOS8

UISplitViewController: 

the master:NavigationController1->UITableViewController 

the detail:NavigationController2->UIWebViewController 

Я хочу показать barButtonItem когда вид идет на портретном режиме на IPad и я знаю, как реализовать он в iOS7 от willHideViewController:

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

Тем не менее, этот метод является устаревшим в прошивкой 8, и я пытался использовать:

-(void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode{ 
    if (displayMode == UISplitViewControllerDisplayModePrimaryHidden) { 
     self.navigationItem.leftBarButtonItem = svc.displayModeButtonItem; 
    }else{ 
     self.navigationItem.leftBarButtonItem = nil; 
    } 
} 

Этот метод работает только при изменении режима отображения, но не при первом запуске приложения с ориентацией на портрет. Итак, как показать barButtonItem при первой загрузке приложения с ориентацией на портрет.

ответ

1

Вы можете добавить кнопку бара, когда контроллер вида показывает вверх:

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

Это только добавит кнопку, когда мастер скрыт.

+0

спасибо, он работает, но есть символ «<» рядом с названием «Show master». – gao6708

+0

@ gao6708 Лучшее решение, которое я нашел для этого, это если вы добавите свой собственный UIBarButtonItem в панель навигации. Смотрите: [http://stackoverflow.com/a/26197227/4150105](http://stackoverflow.com/a/26197227/4150105) Это в Swift, но вы должны легко его перевести. Не забудьте настроить ту же кнопку в 'splitViewController: willChangeToDisplayMode:' – kaischo

+0

спасибо, получите! 'self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle: @" Course "style: self.splitViewController.displayModeButtonItem.style target: self.splitViewController.displayModeButtonItem.target action: self.splitViewController.displayModeButtonItem.action];' – gao6708

0
-(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; 
    } 
} 
Смежные вопросы