Я представляю модальный контроллер вида в приложении UISplitViewController
.Я поменял местное представление по умолчанию для UINavigationController
.
. В моем UINavigationController
я реализовал несколько методов, чтобы показать кнопку «Мастер» для контроллера разделенного вида в левом верхнем углу.Проблема заключается в том, что когда ориентация устройства изменяется, когда виден модальный вид, кнопка не исчезает из основного вида в моем контроллере навигации.
Что может быть причиной этой проблемы?
РЕДАКТИРОВАТЬ:
Я переместил логику шаблона для кнопки в подкласс UINavigationController.Проблема в том, что когда visibleViewController представляет modalViewcontroller
, , он становится visibleViewController
.Так что мой код по какой-то причине не сможет правильно удалить кнопкуВот мой код:
Код:
#pragma mark - Split view support
- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController: (UIPopoverController *)pc{
barButtonItem.title = NSLocalizedString(@"Menu", @"");
//
// TODO: Handle cases where there is
// a modal view controller that is
// being shown to the user.
//
[((UIViewController *)[self.viewControllers objectAtIndex:0]).navigationItem setLeftBarButtonItem:barButtonItem];
self.popoverController = pc;
}
// 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.visibleViewController.navigationItem setLeftBarButtonItem:nil];
[self.popoverController dismissPopoverAnimated:YES];
self.popoverController = nil;
}
//
// Preserve navigation items across detail
// view loads in portrait mode.
//
- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated{
UIBarButtonItem *barItem = nil;
if (self.visibleViewController.navigationItem.leftBarButtonItem != nil) {
barItem = self.visibleViewController.navigationItem.leftBarButtonItem;
}
[super setViewControllers:viewControllers animated:animated];
if (barItem != nil) {
[self.visibleViewController.navigationItem setLeftBarButtonItem:barItem];
}
}