Swift TabbarViewController - действие, основанное на выборе оповещения.shouldSelect и didSelect не помогают - PullRequest
0 голосов
/ 01 июня 2019

Я хочу изменить вкладку на панели вкладок в зависимости от выбора оповещения (Предупреждение - вы уверены, что хотите покинуть эту страницу. СЛУЧАЙ - Да - изменить представление согласно выбранной панели вкладок. СЛУЧАЙ - Нет - Ничего не делать Оставайтесь на той же странице (индекс табуляции).

Я пытался использовать метод tabbarcontrollerdelegate didselect и должен выбрать, но не смог заставить его работать.


 func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {

var decision : Bool?
let alert = UIAlertController(title: "You are in middle of a Quiz", message: "Do you want to end the Quiz in between !",         preferredStyle: UIAlertController.Style.alert)

alert.addAction(UIAlertAction(title: "No", style: UIAlertAction.Style.default, handler: { _ in
            // do nothing.
            decision = false
        }))
        alert.addAction(UIAlertAction(title: "Yes",
                                      style: UIAlertAction.Style.default,
                                      handler: {(_: UIAlertAction!) in
                                        decision = true
            // go to clicked tabbar view                          
        }))
        self.present(alert, animated: true, completion: nil)

    return decision!

    }

Этот код не работает, потому что, прежде чем перейти к выбору оповещений, didselect возвращает bool (в вышеописанном случае происходит сбой). Что может быть альтернативой решению этой проблемы, т. Е. При щелчке на панели вкладок представление должно измениться только после того, как пользователь подтвердит, что он хочет покинуть текущую страницу (посредством действия предупреждения).

1 Ответ

0 голосов
/ 01 июня 2019

В методе shouldSelect viewController проверьте, является ли viewController вашим конечным контроллером представления. Если нет, верните true, если да, представьте предупреждение и верните false.

Если No выбрал предупреждение, ничего не делать. Если выбрано Yes, назначьте контроллер вида назначения как selectedViewController в tabBarController

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    if viewController is DestinationViewController {            
        let alert = UIAlertController(title: "You are in middle of a Quiz", message: "Do you want to end the Quiz in between !",         preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "No", style: .default))
        alert.addAction(UIAlertAction(title: "Yes", style: .default, handler: { action in
            tabBarController.selectedViewController = viewController
        }))
        self.present(alert, animated: true, completion: nil)
        return false
    }
    return true
}
...