没有设置触摸手势,但 tabBar 只响应长按。为啥?

Posted

技术标签:

【中文标题】没有设置触摸手势,但 tabBar 只响应长按。为啥?【英文标题】:No touch gestures were set, but tabBar only responds to long press. Why?没有设置触摸手势,但 tabBar 只响应长按。为什么? 【发布时间】:2019-03-05 23:35:51 【问题描述】:

我有一个顶部有一个 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 是否在标签栏下方向上延伸?顺便说一句,tab bar一般都在view的底部,你的意思是navigationController吗? @Magnas 我有一个隐藏在表格视图标题中的搜索栏,当我在表格视图上向下滑动时它会延伸出来,所以我猜它位于标签栏下方?一般来说,是的,标签栏确实位于底部,但我在屏幕顶部附近添加了一个,类似于 instagram 在个人资料页面上在网格视图和单滚动视图之间切换的方式。 【参考方案1】:

由于我无法弄清楚(它可能与它下面的 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
    

【讨论】:

以上是关于没有设置触摸手势,但 tabBar 只响应长按。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

按钮加了长按手势,每次长按,手势事件都连续执行多次怎么办,我想让它只执行一次

iOS结合长按和滑动手势

为啥我的 UItextView 顶部的子视图没有被触摸?

手势识别(点按,长按,轻扫)

一起识别长按和平移手势识别器

iOS长按手势调用两次解决方法