【问题标题】:Detecting taps in UIStackView spacing (between items)检测 UIStackView 间距中的点击(项目之间)
【发布时间】:2019-02-21 15:20:36
【问题描述】:

我正在尝试检测用户何时在 UIStackView 中的项目之间点击。继承 UIStackView 并覆盖 hitTest 和 pointInside 不起作用。只有当我点击一个项目时才会调用它们。

有什么办法可以做到吗?

谢谢!

【问题讨论】:

    标签: ios swift uikit uistackview


    【解决方案1】:

    您可以添加透明视图而不是 UIStackView 之间的空间。

    第 1 步:添加视图并使堆栈视图中的间距为零

    第 2 步:使视图颜色透明

    第 3 步:将点按手势添加到此视图

    第 4 步:为手势添加动作并进行相应处理

    您可以找到示例here

    【讨论】:

      【解决方案2】:

      您需要将点击手势识别器添加到堆栈视图。

      let tapGesture = UITapGestureRecognizer(target: self, action: #selector(stackViewTapped))
      tapGesture.numberOfTapsRequired = 1
      self.stackView.addGestureRecognizer(tapGesture)
      
      @objc func stackViewTapped() {
           print("Stack View tapped")
      }
      

      【讨论】:

        【解决方案3】:

        问题在于不知何故 iOS 不会跟踪透明的视图。所以我最终添加了一个几乎透明视图,它可以恢复项目之间的跟踪:

        let invisibleTrackingView = InvisibleTrackingView(frame: mainStackView.frame)
        invisibleTrackingView.backgroundColor = UIColor.clear.withAlphaComponent(0.001)
        mainStackView.addSubview(invisibleTrackingView)
        
        class InvisibleTrackingView: UIView {
            override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
                return false
            }
        
            override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
                return nil
            }
        }
        

        0.001 值是可以工作的最低值,它是如此之低以至于视图几乎是透明的。由于视图返回 false 和 nil,操作系统会沿着视图链向下移动,直到其中一个匹配。

        【讨论】:

          【解决方案4】:

          我建议您向UIStackView 添加一个非文本按钮并将其用作分隔符。因此,您可以为按钮添加IBAction

          如果您添加一个 UIView,然后将一个 UIGestureRecognizer 添加到 UIView,您可以达到相同的效果。

          关于如何添加UIGestureRecognizer,请查看this link

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-18
            • 2015-08-29
            • 1970-01-01
            • 2020-12-12
            • 2018-04-17
            • 2017-08-20
            相关资源
            最近更新 更多