【问题标题】:iOS Button Visible, Not ClickableiOS 按钮可见,不可点击
【发布时间】:2018-01-05 14:40:30
【问题描述】:

我的情节提要中有一个视图,默认情况下 alpha 设置为 0。在某些情况下,Swift 文件将 alpha 设置为 1。所以无论是否隐藏。在此视图之前仅包含 2 个标签。我正在尝试向视图添加 2 个按钮。

由于某种原因,这些按钮根本无法点击。因此,当您正常点击它时,按钮会在您释放之前或按住按钮时稍微改变颜色。但是由于某种原因,这种行为并没有发生,并且根本没有调用连接到按钮的函数。

似乎有些东西重叠或位于按钮顶部的问题。该按钮是完全可见和启用的,但一切都是不可点击的。我试过Debug View Hierarchy,但在那个视图中一切看起来都是正确的。

任何想法为什么会发生这种情况?

编辑我尝试使用以下代码创建一个类,并在界面生成器中将容器视图设置为该类。

class AnotherView: UIView {
    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
        for view in self.subviews {
            if view.isUserInteractionEnabled, view.point(inside: self.convert(point, to: view), with: event) {
                return true
            }
        }

        return false
    }
}

【问题讨论】:

  • 您在情节提要上检查了enabledUser Interaction Enabled 吗?
  • @NicholasSmith 是的,两者都被检查了
  • @NicholasSmith 哦,我意识到视图已禁用 User Interaction Enabled。我没有意识到这是子视图固有的。有没有办法只为按钮而不是整个视图启用它?它位于 UITableView 之上,因此我希望用户在拖动标签时能够在表格视图上滚动。如果这是有道理的。
  • @CharlieFish:关于您的问题,请参考:stackoverflow.com/questions/5887305/…
  • @CharlieFish:不要引用我的话,但我认为如果 @PuneetSharma 的解决方案不起作用,您可能必须使用 UIGestureRecognisers

标签: ios uibutton uistoryboard


【解决方案1】:

使用hitTest(_:with:) method。当我们调用super.hitTest(point, with: event) 时,super 调用返回 nil,因为用户交互被禁用。所以,相反,我们检查接触点是否在UIButton 上,如果是,那么我们可以返回UIButton 对象。这会将消息发送到 UIButton 对象的选择器。

class AnotherView: UIView {

    @IBOutlet weak var button:UIButton!

    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        let view = super.hitTest(point, with: event)
        if self.button.frame.contains(point) {
            return button
        }
        return view
    }

    @IBAction func buttnTapped(sender:UIButton) {

    }
}

【讨论】:

    猜你喜欢
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    相关资源
    最近更新 更多