如何检测对 UITabBarItem 的双击?
How can I detect a double tap on UITabBarItem?
我尝试添加手势识别器,但没有意识到使用 UITabBarItem 是不可能的,这是我所做的:
还有其他建议吗?
我认为这不会有简单的解决方案,因为双击标签栏项目不是预期的行为。即使你成功了,我也认为 Apple 不会通过审查,因为这可能会违反他们的设计指南。
每当您尝试向未从 UIView 继承的对象添加手势识别器时,您都会看到该错误。尝试将手势识别器添加到 UITabBar,然后使用双击发生的点,将其与正确的选项卡栏项目匹配。
一个简单的解决方案可以是这样的。
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
let name = viewController.tabBarItem.title ?? ""
if(name == "Home"){
if(name == self.selectedTabName){
print("tapped home again")
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "scrollToTop"), object: nil)
}
}
self.selectedTabName = name
self.delay(0.5){
self.selectedTabName = ""
}
}
func delay(_ delay:Double, closure:@escaping ()->()) {
let when = DispatchTime.now() + delay
DispatchQueue.main.asyncAfter(deadline: when, execute: closure)
}
我尝试添加手势识别器,但没有意识到使用 UITabBarItem 是不可能的,这是我所做的:
还有其他建议吗?
我认为这不会有简单的解决方案,因为双击标签栏项目不是预期的行为。即使你成功了,我也认为 Apple 不会通过审查,因为这可能会违反他们的设计指南。
每当您尝试向未从 UIView 继承的对象添加手势识别器时,您都会看到该错误。尝试将手势识别器添加到 UITabBar,然后使用双击发生的点,将其与正确的选项卡栏项目匹配。
一个简单的解决方案可以是这样的。
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
let name = viewController.tabBarItem.title ?? ""
if(name == "Home"){
if(name == self.selectedTabName){
print("tapped home again")
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "scrollToTop"), object: nil)
}
}
self.selectedTabName = name
self.delay(0.5){
self.selectedTabName = ""
}
}
func delay(_ delay:Double, closure:@escaping ()->()) {
let when = DispatchTime.now() + delay
DispatchQueue.main.asyncAfter(deadline: when, execute: closure)
}