Раскрутите из VC в TabBarController и измените индекс вкладки - PullRequest
0 голосов
/ 08 мая 2019

У меня есть следующая схема раскадровки:

diagram of Storyboard layout

Когда приложение запускается, оно переходит к HomeView VC в TabIndex 1.

В HomeView у меня есть кнопка, и я перехожу к TestView, используя

performSegue(withIdentifier: "goToStartTest", sender: self)

Теперь я хочу перейти от TestView к HistoryView.Единственный способ сделать это прямо сейчас - создать переход от TestView до TabBarController.Это вызывает HomeView с неповрежденной панелью табуляции.Я делаю это с TestView, используя

performSegue(withIdentifier: "testToRes", sender: self)

Однако, это оставляет меня на HomeView, мне нужно HistoryView.

Исследование, которое я провел, указывает на использование Unwind иобнаруживая, откуда произошел segue и действуя соответственно.

Я использую последний Xcode с Swift 5.

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Настройте HomeViewController так:

class HomeViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    var goToHistory = false

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        if goToHistory {
            goToHistory = false

            // Use whichever index represents the HistoryViewController
            self.tabBarController?.selectedIndex = 1
        }
    }

    @IBAction func unwindAndGoToHistory(_ segue: UIStoryboardSegue) {
        goToHistory = true
    }
}

В вашем TestViewController либо:

  1. Подключите UIButton к значку Exit, чтобы развернуть к unwindAndGoToHistory:.

    OR

  2. Создайте программную раскрутку, подключив от значка View Controller к значку Exit (снова выбирая unwindAndGoToHistory:), а затем найдите этот переход в представлении Структура документа и дайте это идентификатор , такой как "unwindToHistory" в инспекторе атрибутов . Когда вы будете готовы к переходу, активируйте его с помощью performSegue(withIdentifier: "unwindToHistory", sender: self).

Затем, когда начнется процесс раскрутки, iOS выдаст TestViewController и вызовет unwindAndGoToHistory(). Там goToHistory устанавливается на true. После этого будет запущено viewWillAppear(). Поскольку goToHistory теперь true, код установит selectedIndex tabBarController для переключения на вкладку HistoryViewController.

Примечание: Это покажет анимацию раскрутки назад к HomeViewController, затем представление автоматически переключится на HistoryViewController. Если вместо этого вы хотели бы немедленно переключиться на HistoryViewController без анимация, переопределить viewWillAppear вместо viewDidAppear.

0 голосов
/ 08 мая 2019

Чтобы перейти от TestView к HistoryView, должно быть что-то вроде этого:

// From TestView to HomeView(0)
navigationController?.popViewController(animated: true)
// Change the active tab in the tabcontroller
(navigationController?.presentingViewController as? UITabBarController)?.selectedIndex = 1
...