Как скрыть родительскую панель вкладок при нажатии контроллера в navigationController - PullRequest
24 голосов
/ 01 июня 2010

У меня есть приложение с контроллером панели вкладок, и каждое представление содержит контроллер навигации. Мое главное окно выглядит следующим образом: Изображение здесь http://www.freeimagehosting.net/image.php?7bc867a594.png

Все работает нормально, как есть, но я заметил проблему при перемещении подробного представления к контроллеру навигации. В didSelectRowAtIndexPath для tableviewcontroller, который принадлежит контроллеру панели вкладок (тот, который называется Last в образе), я делаю это:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ArticleViewController *articleController = [[ArticleViewController alloc] initWithNibName:@"ArticleView" bundle:nil];

    [self.navigationController pushViewController:articleController animated:YES];

    [articleController release];
    articleController = nil;
}

ArticleViewController имеет собственную панель вкладок, потому что он должен отображать разные вещи. Проблема в том, что когда я помещаю ArticleViewController в navigationController, я вижу обе вкладки в нижней части представления. Можно ли как-нибудь решить эту проблему?

Заранее спасибо

Ответы [ 7 ]

81 голосов
/ 01 июня 2010

Потратив часы и разместив здесь вопрос, я обнаружил, что решением этой проблемы является добавление следующей строки после создания ArticleController.

articleController.hidesBottomBarWhenPushed = YES;
25 голосов
/ 23 декабря 2015

Если вы предпочитаете конфигурацию раскадровки, а не кодирование, для этого есть переключатель. Просто перейдите на destinationViewController> Инспектор атрибутов:

enter image description here

11 голосов
/ 26 февраля 2013

Очень простое решение:

 destinationViewController.hidesBottomBarWhenPushed = YES;

В вашем случае:

 articleController.hidesBottomBarWhenPushed = YES;

Надеюсь, это поможет!

3 голосов
/ 12 октября 2017

Вы можете просто скрыть родительскую вкладку через раскадровку.

Выбрать viewcontroller > Инспектор атрибутов > check Скрыть нижнюю панель при нажатии

1 голос
/ 22 октября 2016

Вы можете добавить приведенный ниже код в контроллер вида, который вы нажимаете.

-(BOOL)hidesBottomBarWhenPushed
{ 
     return YES;
}

Это позволит скрыть панель вкладок только в контроллере push-представления, и когда вы откроете панель вкладок контроллера просмотра, она не будет отображаться в остальных остальных контроллерах представления.

Swift версия (3.x и выше)

override var hidesBottomBarWhenPushed: Bool {
    get {
        return navigationController?.topViewController == self
    }
    set {
        super.hidesBottomBarWhenPushed = newValue
    }
}

Спасибо

0 голосов
/ 28 сентября 2017

введите описание изображения здесь

Зайдите в конструктор интерфейса в Xcode -> открыть инспектор атрибутов и отметьте пункт «Скрыть нижнюю панель при нажатии», чтобы увидеть контроллер, который вы не хотите показывать на панели вкладок. Это будет работать !!

0 голосов
/ 26 сентября 2017

для swift 3, напишите тот же код, что и вы, и раскройте панель вкладок перед кодом pushviewController, как показано ниже

   var frame = self.tabBarController?.tabBar.frame
    frame?.origin.y = self.view.frame.size.height - (frame?.size.height)!+112
    UIView.animate(withDuration: 0.2, animations: {
        self.tabBarController?.tabBar.frame = frame!
    })
    self.navigationController?.pushViewController(viewController, animated: true)

или просто используйте, чтобы отобразить панель вкладок, которую вы можете использовать

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