Перейти к вложенному ViewController из основного TabBarController программно в Swift - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть следующая структура ViewController, см. Изображение ниже.

Всякий раз, когда я хочу перейти от ViewController 1 к любому другому основному контроллеру, который я использую self.tabBarController?.selectedIndex = indexNumber

// for instance, this would take me to ViewController 3
self.tabBarController?.selectedIndex = 2

Исходя из рисунка ниже, как я могу программно перейти от ViewController 1 к TargetViewController при нажатии кнопки в ViewController 1?

К вашему сведению - на рисунке ниже я показываю кнопку в ViewController 3это просто, чтобы показать структуру раскадровки, фактическое нажатие кнопки произойдет в ViewController 1

enter image description here

РЕДАКТИРОВАТЬ:

Здесьэто то, как вы делаете это, основываясь на ответе Prashant Tukadiya.

ViewController 1

В ViewController 1 добавьте в событие события следующее:

    self.tabBarController?.selectedIndex = 2
    let nav = (self.tabBarController?.viewControllers?[2] as? UINavigationController)
    let vc =  TargetViewController.viewController()
    nav?.pushViewController(vc, animated: true)

TargetViewController

  1. В вашем TargetViewController добавьте следующий метод класса.

    class func viewController () -> TargetViewController {let storyboard = UIStoryboard (name: "Main", bundle: nil) вернуть storyboard.instantiateViewController (withIdentifier: "targetViewControllerID") как!TargetViewController}

  2. Добавьте targetViewControllerID в поле Storyboard ID.

Ответы [ 3 ]

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

В качестве функции кнопки в ViewController 1 вы можете использовать это:

     func presentMethod(storyBoardName: String, storyBoardID: String) {
        let storyBoard: UIStoryboard = UIStoryboard(name: storyBoardName, bundle: nil)
        let newViewController = storyBoard.instantiateViewController(withIdentifier: storyBoardID)
        self.definesPresentationContext = true
        self.present(newViewController, animated: true, completion: nil)
    }

//usage

 presentMethod(storyBoardName: "Main", storyBoardID: "TargetViewController") 
0 голосов
/ 05 декабря 2018

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

    TabController.shared.tabcontroller.selectedIndex = 1
    let navigation  = TabController.shared.tabcontroller.selectedViewController?.navigationController

    let SavedAddress = self.storyboard?.instantiateViewController(withIdentifier: "SavedAddressVC") as! SavedAddressVC
    navigation?.pushViewController(SavedAddress, animated: true)

Я использовал то же решение.и это рабочий код для меня.

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

Вы можете напрямую присвоить идентификатор TargetViewController из раскадровки и затем загрузить из раскадровки, а затем нажать или представить его.

как добавить этот метод в TargetViewController

class func viewController () ->  TargetViewController {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    return storyboard.instantiateViewController(withIdentifier: "yourIdentifer") as! TargetViewController
}

и далеесобытие касания

     let vc =  TargetViewController.viewController()

    self.navigationController?.pushViewController(vc, animated: true)

РЕДАКТИРОВАТЬ

После прочтения комментариев вы получили четкое представление о ваших требованиях

Действие кнопки с ViewController1, Вы хотитеперейти к TargetViewController но при нажатии назад вы захотите вернуться к viewController 3

Сначала выберите определенный индекс

   self.tabBarController?.selectedIndex = 2

После этого вам нужно захватить UINavigationController

let nav = (self.tabBarController?.viewControllers?[2] as? UINavigationController)

затем нажмите ViewController

    let vc =  TargetViewController.viewController()

    nav?.pushViewController(vc, animated: true)

Примечание. Не забудьте добавить идентификатор для раскадровки в TargetViewController, а также добавить метод class func viewController () -> TargetViewController в TargetViewController

Надеюсь, это полезно

...