Выберите вкладку и измените сегмент в загруженном представлении - PullRequest
0 голосов
/ 21 декабря 2018

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

Например, если у меня есть меню и щелкнитекнопка под названием «A / B», я хочу, чтобы он выбрал вкладку «A», а затем сегмент «B».Если я нажму кнопку с названием «A / C», я хочу, чтобы она выбрала вкладку «A», а затем сегмент «C».

Первую часть проблемы, которую мне удалось выяснить, следующим образом:

class TabBarController: UITabBarController {
        ...
        func selectTab(name: String) {
            for tab in self.viewControllers! {
                if(name == tab.tabBarItem.title) {
                    self.selectedViewController = tab
                    return
                }
            }
        }
}

Я не уверен, как получить представление, которое автоматически открывается, хотя.Каков наилучший способ сделать это?

Большое спасибо заранее!

1 Ответ

0 голосов
/ 21 декабря 2018

В конце концов, я понял, что могу получить контроллер навигации от self.selectedViewController, а затем контроллер просмотра от него, используя topViewController.

Например, если у меня есть контроллер навигации с именем NavigationController и контроллер представления с именем GroupsViewController, я могу сделать следующее:

func selectTab(name: String, contentType: ContentType? = nil) {
    for tab in self.viewControllers! {
        if(name == tab.tabBarItem.title) {
            self.selectedViewController = tab
            if let nc = self.selectedViewController as? NavigationController{
                if let vc = nc.topViewController {
                    if let gvc = vc as? GroupsViewController {
                         gvc.activeContentType = contentType
                    }
                }
            }
            return
        }
    }
}

Обратите внимание, что мне пришлось установить переменную (типа ContentType) для использования в ViewDidAppear вместо доступа к сегментууправление, как я изначально планировал (потому что, хотя вкладка может присутствовать, контроллер представления, возможно, еще не был загружен).

...