Панель вкладок не отображается, когда я открываю из бокового меню

я использую этот код

 let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
            let controller = storyboard.instantiateViewController(withIdentifier: "PrintMainViewController")
            self.navigationController!.pushViewController(controller, animated: true)

а также добавил:

self.tabBarController?.tabBar.isHidden = false

person Dhara    schedule 04.04.2019    source источник
comment
объясните подробно, чтобы мы могли вам помочь.   -  person jarvis12    schedule 04.04.2019
comment
хотите показать tababar, когда пользователь щелкает из бокового меню, но он не отображается. но когда он из домашнего контроллера, он будет отображаться.   -  person Dhara    schedule 04.04.2019
comment
Вы уверены, что PrintMainViewController является подклассом контроллера панели вкладок? Строка self.tabBarController?.tabBar.isHidden = false, скорее всего, абсолютно ничего не сделает в вашем коде, так как self.tabBarController это nil, если это тот же контроллер представления, что и в первом фрагменте. Если что, попробуй (controller as! UITabBarController).tabBar.isHidden = false. Если он дает сбой, то этот контроллер не является подклассом контроллера панели вкладок.   -  person Matic Oblak    schedule 04.04.2019
comment
@Dhara Вам нужно изменить выбор tabBarController при щелчке в экземпляре бокового меню pushViewController, если вы хотите отобразить панель вкладок для всех.   -  person Nikunj Kumbhani    schedule 04.04.2019
comment
Нет, PrintMainViewController не является подклассом. это из бокового меню   -  person Dhara    schedule 04.04.2019
comment
можете пожалуйста объяснить вкратце?? @Nikunj Кумбхани   -  person Dhara    schedule 04.04.2019
comment
@Dhara Что такое боковое меню? Используете ли вы какую-либо стороннюю библиотеку?   -  person Nikunj Kumbhani    schedule 04.04.2019
comment
да swrevealviewcontroller я использую.   -  person Dhara    schedule 04.04.2019
comment
@Dhara Отлично, я уже ответил на этот вопрос, пожалуйста, проверьте это stackoverflow.com/a/51725803/10150796< /а>   -  person Nikunj Kumbhani    schedule 04.04.2019
comment
спасибо @NikunjKumbhani   -  person Dhara    schedule 04.04.2019


Ответы (2)


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

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

Самый быстрый способ сделать это — открыть статический экземпляр контроллера представления панели вкладок. Это будет работать только в том случае, если в вашем приложении всегда есть только 1 контроллер панели вкладок (вероятно, 99% приложений).

Сначала добавьте текущий экземпляр в контроллер представления панели вкладок:

class MyTabBarViewController: UITabBarController {

    static private(set) var currentInstance: MyTabBarViewController?

    override func viewDidLoad() {
        super.viewDidLoad()
        MyTabBarViewController.currentInstance = self
    }

}

Поэтому, когда представление загружается, присваивается статическое значение, и теперь к нему можно получить доступ в любом месте вашего проекта через MyTabBarViewController.currentInstance.

Остальное — это просто доступ к текущему выбранному контроллеру представления и нажатие нового контроллера представления. Что-то вроде этого должно делать:

let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "PrintMainViewController")
(MyTabBarViewController.currentInstance?.selectedViewController as? UINavigationController)?.pushViewController(controller, animated: true)
person Matic Oblak    schedule 04.04.2019
comment
Спасибо @Matic Oblak - person Dhara; 04.04.2019
comment
У меня это не работает... Вот мой код в боковом меню. TabbarController *tabClassObj = [Общий экземпляр TabbarController]; [tabClassObj.selectedViewController pushViewController: vcIdentifier анимированный: ДА]; - person Human; 18.02.2020
comment
@Sivagami падает или ничего не происходит? Постарайтесь дать как можно больше информации «не работающим». Поставьте точку останова на вторую строку кода, который вы разместили. Затем в консоли в вашем Xcode (обычно находится внизу справа) введите «po tabClassObj» и «po tabClassObj.selectedViewController» и дайте мне знать, что консоль выводит для обоих. - person Matic Oblak; 18.02.2020
comment
Это не подталкивает к следующему контроллеру представления. Я проверяю журнал, tabClassObj.selectedViewController имеет значение (контроллер навигации). Пожалуйста, проверьте эту ссылку, это то, чего я пытаюсь достичь. stackoverflow.com/questions/60278538 / - person Human; 18.02.2020
comment
Если tabClassObj.selectedViewController действительно является навигационным контроллером, то это странная проблема. Ваши вызовы должны быть правильными, и эта часть кода должна работать правильно. Другими кандидатами могут быть (не ограничиваясь этим), что вы вызываете этот код не в основном потоке, что этот навигационный контроллер не находится сверху в это время (какой-то другой контроллер представлен над ним или отображается другая панель вкладок), что контроллер мгновенно всплывает, что controller равно нулю ... - person Matic Oblak; 18.02.2020

Вы должны нажать TabBarController

self.tabBarController?.pushViewController(controller, animated: true)
person Yervand Saribekyan    schedule 04.04.2019