Как открыть тот же V C, встроенный в контроллер навигации из TabbarController - PullRequest
0 голосов
/ 01 мая 2020

Есть 5 вкладок, и первые 2 из них должны открыть тот же V C, который будет встроен в контроллер навигации. Все ВК находятся в раскадровке. В зависимости от того, какие из этих 2 нажаты, мне нужно передать значение (думаю, я смогу это выяснить), которое изменит некоторые компоненты пользовательского интерфейса этого V C.

Что у меня есть до сих пор это:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        let indexOfTab = tabBar.items?.firstIndex(of: item)
        switch indexOfTab {
        case 1:
               // Open 1st VC with 'x' UI components
        case 2:
               // Open 1st VC with 'y' UI components
}

Таким образом, я могу без проблем открывать вкладки с 3 по 5, но первые 2 не работают должным образом, поскольку они встроены в контроллер навигации.

Ожидаемый результат : Индекс вкладки 1, за которым следует индекс 2 вкладки (или наоборот), должен открыть 2-й V C (или 1-й в зависимости от обстоятельств) как root контроллер представления

Фактический результат: нажатие Индекс 1, за которым следует индекс 2 вкладки (или наоборот), открывает индекс 1 вкладки как контроллер представления root и нажимает индекс 2 вкладки.

Как получить ожидаемый результат?

РЕДАКТИРОВАТЬ: Я думаю, я знаю, почему это происходит. Это потому, что я перешел к V C для этих 2 VC в раскадровке, а затем программно пытаюсь открыть их. Есть ли способ сделать это в сочетании раскадровки и программирования c или мне нужно программно реорганизовать всю панель вкладок?

1 Ответ

2 голосов
/ 01 мая 2020

Вы можете создать две ссылки из tabBarController на V C, который вы хотите представить, и назначить им идентификатор, поэтому в методах prepareForSegue вы можете передать V C требуемое значение, это работает, если две вкладки представляют два разных экземпляра. Вместо этого, если две вкладки представляют один и тот же экземпляр, вы можете сохранить экземпляр V C в prepareForSegueAction или установить дочерний V C в качестве делегата родителя (я предпочитаю второй вариант лично), а затем вы можете использовать метод, позволяющий узнать, когда была нажата вкладка, и передать V C нужное значение, используя экземпляр o метода.

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