Nano Hash - криптовалюты, майнинг, программирование

Как скрыть панель вкладок в моем пользовательском навигационном контроллере?

Я хочу скрыть нижнюю панель вкладок при нажатии новых контроллеров представления в UINavigationController (я использую панель вкладок по умолчанию). Я делаю это, наследуя UINavigationController и создавая свой собственный навигационный контроллер.

Я переопределяю ниже две функции:

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    self.tabBarController.tabBar.hidden = YES;
    [super pushViewController:viewController animated:YES];
}

- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
    NSLog(@"NavigationController: View controller count = %lu", self.viewControllers.count);
    if (self.viewControllers.count <= 2) {
        self.tabBarController.tabBar.hidden = NO;
    }
    return [super popViewControllerAnimated:animated];
}

В делегате приложения:

// Use my custom navigation controller
NavigationController *myNav1 = [[NavigationController alloc] initWithRootViewController:myView];
myNav1.navigationBar.translucent = NO;
myNav1.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"abc" image:[UIImage imageNamed:@"abc"] selectedImage:[UIImage imageNamed:@"abc"]];

...

self.tabController.viewControllers = [NSArray arrayWithObjects:myNav1, myNav2, myNav3, myNav4, nil];

Проблема:

  1. При нажатии новых контроллеров представления нижняя панель сразу же скрывается, я хочу, чтобы она выглядела так, как будто ее нажимают с помощью контроллеров представления.
  2. Когда я пытаюсь вернуться к предыдущему контроллеру представления, используя жесты, отображается нижняя панель, даже если я перестану возвращаться, она не будет скрываться.

Я знаю флаг hidesBottomBarWhenPushed. Если я использую этот флаг, мне нужно устанавливать его на YES каждый раз, когда мне нужно нажать на контроллер представления. Это немного сложно.

Есть ли способ исправить эти проблемы в моем пользовательском навигационном контроллере?


  • Вы используете панель вкладок по умолчанию или пользовательскую панель вкладок? 18.02.2017
  • @ravi.p Я использую панель вкладок по умолчанию. 18.02.2017
  • возьмите один объект UINavigationController в делегате приложения и в didFinishLaunchingWithOptions назначьте его self.appNavController = (UINavigationController *)self.window.rootViewController; поэтому, когда вы хотите нажать без панели вкладок, используйте его с делегатом приложения 18.02.2017
  • проверьте этот ответ: stackoverflow.com/a/11490623/4831524 18.02.2017

Ответы:


1

Кажется, решает мою проблему (код не очень хорош, позже сделаю обновление):

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    NSLog(@"NavigationController.pushViewController: view controller count %lu", self.viewControllers.count);

    UIViewController *lastVC = nil;
    if (self.viewControllers.count > 0) {
        lastVC = self.viewControllers[self.viewControllers.count - 1];
    }
    if (lastVC != nil) {
        lastVC.hidesBottomBarWhenPushed = YES;
    }
    [super pushViewController:viewController animated:YES];
    if (self.viewControllers.count == 2) {
        lastVC.hidesBottomBarWhenPushed = NO;
    }
}
18.02.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..