Как приостановить / возобновить / отменить событие в iOS - PullRequest
0 голосов
/ 30 мая 2018

У меня есть UITabBarController и иногда в делегате didSelectItem мне нужно приостановить событие и представить всплывающее окно.Если пользователь подтвердил возобновление события, а если нет, событие будет отменено.Вот мой код:

class YC_TabBarController: UITabBarController {

    var prevIndex: Int!
    var exitAction: (()->Bool)?

    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        self.prevIndex = self.selectedIndex

        if self.prevIndex == 2 {

            guard self.exitAction != nil else {return}
            //pause
            let isExitAccepted: Bool = self.exitAction!()
            //if true -> resume
            //if false -> prevent from switching tab

        }

    }
}

Как я могу это сделать?Пожалуйста, помогите

1 Ответ

0 голосов
/ 30 мая 2018

Вы должны подтвердить UITabBarControllerDelegate в первом контроллере вида и return false, если в shouldSelect viewController выбран нужный контроллер вида.Затем вы должны показать свой всплывающий вид.Во всплывающем окне «ОК / Подтвердить» вы можете изменить выбранный контроллер представления для self.tabBarController

class ViewController: UIViewController,UITabBarControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tabBarController?.delegate = self
    }

    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        if viewController is SecondViewController {
            //show alert
            return false
        } else {
            return true
        }
    }
    func popUpOkAction(_ sender:UIButton) {
        if let secVC = self.tabBarController?.viewControllers?.first(where: { $0 is SecondViewController }) {
            self.tabBarController?.selectedViewController = secVC
        }
    }
}

Если вы хотите выполнить это из нескольких контроллеров представления, а не из первого ViewController, вы можете подтвердить на UITabBarControllerDelegateв самой YC_TabBarController.

...