我创建了具有多个视图控制器的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) {
// ...
}
答案 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)
}
}