Показать контроллер представления с выбранным элементом TableView и контроллером панели вкладок

Я пытаюсь представить SharkProfileTableViewController от моего Main.storyboard файл с TabBarViewController от действия кнопки в модальном представлении в Upload.storyboard у которого нет панели вкладок.

ViewController, который я пытаюсь представить, является выбранным элементом из SharksTableViewController просмотр таблицы на основе данных модального представления.

Как мне показать SharkProfileViewController вместе с TabBarViewController?

@IBAction func viewProfileButtonPressed(_ sender: UIButton) {
    let stb = UIStoryboard(name: "Main", bundle: nil)
    let tabBar = stb.instantiateViewController(withIdentifier: "tabBar") as! TabBarViewController
    let sharkTabBar = stb.instantiateViewController(withIdentifier: "sharkTableView") as! SharksTableViewController
    let sharkProfile = stb.instantiateViewController(withIdentifier: "sharkProfile") as! SharkProfileTableViewController

    sharkProfile.selectedShark = shark as JSONObject

    tabBar.selectedIndex = 3

    self.present(tabBar, animated: true) {

    }

}

TabBarController - вкладка "Акула" - это вкладка, которая должна отображать TabBarController

SharksTableViewController - при выборе элемента в этом табличном представлении он представляет... SharksTableViewController

SharkProfileTableViewController - это представление, которое я пытаюсь представить (с отображением панели вкладок) SharkProfileTableViewController

1 ответ

Решение

Если вы хотите передать какие-либо данные SharkProfileTableViewController что вы добавили в UITabbarController тогда вы можете получить к нему доступ, используя viewControllers собственностью UITabbarController, viewControllers свойство вернет массив UIViewController так что вам нужно получить к нему доступ, используя индекс с вашим индексом контроллера на вкладке.

@IBAction func viewProfileButtonPressed(_ sender: UIButton) {
    let stb = UIStoryboard(name: "Main", bundle: nil)
    let tabBar = stb.instantiateViewController(withIdentifier: "tabBar") as! TabBarViewController
    //If SharkProfileTableViewController at 4 position in tabbar then access it from array like this
    let nav = tabBar.viewcontrollers?[3] as! UINavigationController 
    let sharkProfile = stb.instantiateViewController(withIdentifier: "sharkProfile") as! SharkProfileTableViewController
    sharkProfile.selectedShark = shark as JSONObject        
    tabBar.selectedIndex = 3        
    self.present(tabBar, animated: true) {
        nav.pushViewController(sharkProfile, animated: false)
    }
}

Теперь вам нужно просто изменить индекс в viewcontrollers?[3] получить доступ к другому контроллеру из массива.

Другие вопросы по тегам