swift - 为什么 tabbarcontroller 中的窗口手势识别器不起作用?
问题描述
我创建了一个带有多个视图控制器的 UITabBarController。我向视图控制器添加了一个 UIPanGestureRecognizer 到 UIWindow。
这可以正常工作。
问题:每当我更改 UITabBarController 中 viewWillAppear 中的 selectedIndex 时(以显示最后打开的选项卡),将显示正确的视图控制器,但添加到窗口的 panGestureRecognizer 不起作用。
当我手动更改选定的选项卡时,窗口 panGestureRecognizer 工作。每次应用启动都会发生这种情况。
有什么问题?(Xcode 10.2.1,斯威夫特 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) {
// ...
}
解决方案
清理后,重建 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)
}
}
推荐阅读
- python - 如何计算分组和聚合数据的平均值?
- json - ConvertFrom-Json 返回“无法处理参数,因为参数“名称”的值无效。”
- java - Firebase查询名称是否与使用java登录时的密码匹配
- swift - SwiftUI的“.disabled”修饰符的变化可以动画吗?
- amazon-web-services - 我可以查看 Fifo 队列中不可接收的可用消息吗
- javascript - JavaScript - 在标签关闭时发送 AJAX 调用(删除请求)
- android - GoogleSignIn.getLastSignedInAccount 在 GoogleSignIn.requestPermissions 之后返回 null
- encoding - ffmpeg 单色 rawvideo
- angular - Angular 6+ - 应该/必须由行为主体组成的对象本身是行为主体吗?
- php - 创建多维数组并删除空类别