Почему не работает распознаватель жестов окна в tabbarcontroller? - PullRequest
0 голосов
/ 12 мая 2019

Я создал UITabBarController с несколькими контроллерами представления.К контроллерам представления я добавил UIPanGestureRecognizer в окно UIWindow.

Это работает правильно.

Проблема: Всякий раз, когда я изменяю selectedIndex в viewWillAppear в UITabBarController (чтобы показатьпоследняя открытая вкладка), будет отображаться правильный контроллер представления, но добавленный panGestureRecognizer к окну не работает.

Когда я вручную изменяю выбранную вкладку, работает окно panGestureRecognizer.Это происходит при каждом запуске приложения.

В чем проблема?(Xcode 10.2.1, Swift 5)

Заранее спасибо!

// UITabBarController
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if UserDefaults.standard.object(forKey: self.selectedTabIndexKey) != nil {
        selectedIndex = UserDefaults.standard.integer(forKey: self.selectedTabIndexKey)
    }
}


// ViewController2
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    if let appDelegate = UIApplication.shared.delegate as? AppDelegate, let window = appDelegate.window {
        let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
        window.isUserInteractionEnabled = true
        window.addGestureRecognizer(panGestureRecognizer)
    }
}


@objc fileprivate func handlePan(gesture: UIPanGestureRecognizer) {
    // ...
}

1 Ответ

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

После очистки пересоберите проект Xcode и поместите selectedIndex в viewDidLoad, он наконец заработает.

override func viewDidLoad() {
    super.viewDidLoad()

    viewControllers = [
        vc1,
        vc2
    ]

    if UserDefaults.standard.object(forKey: self.selectedTabIndexKey) != nil {
        selectedIndex = UserDefaults.standard.integer(forKey: self.selectedTabIndexKey)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...