ios - 没有设置触摸手势,但 tabBar 只响应长按。为什么?
问题描述
我有一个视图,顶部有一个 tabBar,下面是一个 tableView。tableView 具有受限于它的触摸手势(点击、双击和平移手势)。但是,tabBar 没有安装触摸手势,仅响应长按触摸。
一些有用的信息: - tabBar 委托被设置为 self
只有tabBar代码:
func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
if item.tag == 101 { //tag number of first tab bar item
print("tableView")
}
if item.tag == 102 { //tag number of second tab bar item
print("collectionView") //going to add collection view eventually
}
}
任何帮助将不胜感激。谢谢!
解决方案
由于我无法弄清楚(它可能与它下面的 tableView 内容有关),我决定使用触摸手势来解决这个问题:
@IBOutlet weak var tabBar: UITabBar!
override func viewDidLoad() {
let tabBarTap = UITapGestureRecognizer(target: self, action: #selector(MyViewController.switchSelectedTabItem(tapGestureRecognizer:)))
tabBarTap.delegate = self
tabBarTap.numberOfTapsRequired = 1
tabBarTap.numberOfTouchesRequired = 1
tabBar.addGestureRecognizer(tabBarTap)
}
@objc func switchSelectedTabItem(tapGestureRecognizer: UITapGestureRecognizer) {
let touchPoint = tapGestureRecognizer.location(in: self.view)
let split = tabBar.frame.width/2 //because i have two tab bar items. divide it by how many tab bar items you have
if touchPoint.x > split { //again, since i have two tab bar items, i can just divide the location of the tap into two sections (tab bar item 1 and tab bar item 2)
tabBar.selectedItem = tabBar.items?[1]
//run code for when second item is selected
} else {
tabBar.selectedItem = tabBar.items?[0]
//run code for when second item is selected
}
}
推荐阅读
- php - 用于多租户的 Laravel Spatie/权限过滤器
- c# - 使用 ContinueDialogAsync 时字典中不存在给定键“对话框”
- c# - 有条件地创建对象
- delphi - 表单控件(编辑、组合框、备忘录等)查询是否已修改?
- sql - Firebird/Lazarus SQL 视图与选择 iif?
- java - 如何在 JavaFX 应用程序中加载的 FXML 文件中显示元素?
- elasticsearch - 配置 Grafana 数据源以使用多个 ElasticSearch 节点
- javascript - 如何堆叠精灵元素而不通过对象丢弃
- curl - 卷曲请求 - 无法解析主机:“密码”
- c# - 'await' 运算符只能在异步 lambda 表达式中使用。考虑用 'async' 修饰符标记这个 lambda 表达式