iOS Отключить отображение в корневом представлении при нажатии кнопки панели вкладок

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

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

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

Спасибо!


person ryder    schedule 28.02.2015    source источник
comment
Я не знаю, о какой функциональности вы говорите. Когда вы переключаете вкладки в контроллере панели вкладок, это не должно влиять на стек навигации любого из контроллеров навигации, которые являются корневыми контроллерами вкладки. Я точно не видел такого поведения в своих приложениях. Объясните, как настроен ваш контроллер.   -  person rdelmar    schedule 28.02.2015
comment
Он не имеет в виду переключение между вкладками, насколько я понимаю. Когда вы выбираете текущую выбранную вкладку (снова) в UITabBarController, она автоматически возвращается к rootviewController своего стека navigationController. Это поведение по умолчанию. И он хочет этого избежать. Поправьте меня если я ошибаюсь.   -  person croX    schedule 28.02.2015
comment
@croX, да, я неправильно понял вопрос. То, что вы описываете, является поведением по умолчанию, когда вы нажимаете на вкладку, на которой уже находитесь.   -  person rdelmar    schedule 28.02.2015
comment
@rdelmar, да, именно так.   -  person croX    schedule 28.02.2015
comment
Привет, ребята, да, извините, что непонятно. Это когда вкладка уже выбрана и нажата снова   -  person ryder    schedule 02.03.2015
comment
Я имею ту же самую проблему. Удивлен, что нашел этот пост   -  person Nearpoint    schedule 03.03.2015
comment
Я нашел это решение, и оно работает очень хорошо: stackoverflow.com/questions/4856159/   -  person Nearpoint    schedule 03.03.2015


Ответы (2)


Можно было бы создать подкласс UITabBarController и реализовать протокол UITabBarControllerDelegate. Тогда вы могли бы реализовать

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

и вернуть NO, когда снова будет выбран конкретный viewController. Один из способов сделать это - сохранить недавно выбранный элемент и сравнить его с текущим выбранным.

person croX    schedule 28.02.2015
comment
Спасибо за комментарий к моему ответу, я слишком устал, чтобы отвечать на вопросы прямо сейчас. - person Zane Helton; 28.02.2015

Столкнулся с этой проблемой на выходных. Я продолжал обнаруживать, что мой собственный TabBarController был равен нулю во время метода appDelegate didfinishlaunching ().

Я решил сделать свой настраиваемый TabBarController UITabBarControllerDelegate, а затем реализовать следующий метод делегата внутри настраиваемого класса TabBarController:

    // Stops View Controllers from being dismissed when a tab is selected on the UITabBarController
    public func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    return viewController != tabBarController.selectedViewController
    }
person Charlie Seligman    schedule 03.04.2019