为什么TabbarController中的窗口手势识别器不起作用?

时间:2019-05-12 12:00:43

标签: swift uitabbarcontroller uigesturerecognizer uiwindow

我创建了具有多个视图控制器的UITabBarController。在视图控制器中,我向UIWindow添加了UIPanGestureRecognizer。

这正常工作。

问题::每当我在UITabBarController的viewWillAppear中更改selectedIndex(以显示最后打开的选项卡)时,都会显示正确的视图控制器,但是添加到该窗口的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 :(得分:0)

清理后,重建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)
    }
}