Скрытие UINavigatonBar контроллера суперпредставления из контроллера подпредставления? - PullRequest
0 голосов
/ 14 июня 2011

Я создаю большое иерархическое приложение для iPhone с несколькими экранами, управляемыми UINavigationController.Один из этих экранов может отображать контент в двух разных форматах (я переключаюсь между ними с помощью UITabBar, созданного IB), и я построил этот экран с видом, который добавляет подпредставление (загруженное из файла пера) на основе активногоtab.

Каждое из этих подпредставлений содержит панель поиска, которая должна сдвигать панель навигации в сторону при ее нажатии.Панель навигации доступна только из контроллера суперпредставления подпредставлений, поэтому я добавил предварительное объявление класса контроллера суперпредставления в контроллер каждого подпредставления.При загрузке подпредставления устанавливается его свойство superViewController.

Обычно каждая панель поиска автоматически скрывает панель навигации по мере необходимости, но мне нужно реализовать эту функцию самостоятельно, поскольку панель находится в представлении выше.панели поиска.Я попытался сделать это с помощью

[self.superViewController hideNavBar];

в методе

- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView

, где «hideNavBar» определяется в superViewController.m следующим образом:

-(void)hideNavBar {
    [self.navigationController setNavigationBarHidden:TRUE animated:TRUE];
}

и я также попытался скрыть панель непосредственно с помощью

[self.superViewController.navigationController setNavigationBarHidden:TRUE animated:TRUE];

В обоих случаях планка не изменилась никоим образом.Должен ли я сказать навигационной панели как-то обновить?Есть ли лучший способ реализовать желаемую функциональность?

Я знаю, что прямое объявление работает правильно, потому что я могу выдвинуть новый взгляд на navigationViewController, используя

 NewViewController *newViewController = [[NewViewController alloc] initWithNibName:@"NewView" bundle:nil];
 [self.superViewController.navigationController pushViewController:newViewController animated:YES];
 [newViewController release];

Заранее спасибо, Джулиан Цейпек

В случае, если это имеет значение, панель навигации устанавливается полупрозрачной, так что подпредставления находятся под панелью.

1 Ответ

0 голосов
/ 14 июня 2011

Вы пробовали использовать контроллер модального вида? Основываясь на каждом выборе, если вы поместите модальный контроллер вида на вид, он автоматически скроет панель навигации.

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

По сути, это экран, который используется для временного принятия пользовательских данных. Если вы реализуете это, он автоматически скрывает панель навигации, когда она появляется, поскольку она принадлежит контроллеру представления, который представляет ее, и не помещается в стек контроллера навигации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...