【问题标题】:UIbutton doesn't respond to touch eventsUIbutton 不响应触摸事件
【发布时间】:2019-06-28 09:06:03
【问题描述】:

我的视图层次结构是这样的:

UIView -> UIStackView
             -> UIView
                -> PlayerView
             -> UIView
                -> UIStackView
                   UITextField (title)
                   UIButton (close)
                   UIButton (settings) etc...

我的问题是...当屏幕加载时,如果我点击关闭或设置按钮,它会起作用。

问题是,如果我先单击播放器视图播放视频,然后我停止视频,当我点击任何 UIButtons 时,它都不起作用。按钮处于活动状态,但触摸事件不会触发。 您可以在此处查看播放器实现: github playerview example

奇怪的是……如果我点击 UITextField(标题)然后我可以再次点击 UIButtons,并且触摸事件正在触发。

我曾尝试将isUserInteractionEnabled = true 添加到我有按钮的 UIView 中,但它不起作用。

here is a screenshot of UI debug tree

Player view object inspector

Player view hierarchy

【问题讨论】:

  • 检查是否有其他视图覆盖按钮。另外,添加相关代码。
  • @PGDev 没有其他视图覆盖,它根本不起作用。如果我不单击其他视图(UIView -> PlayerView),按钮会起作用 RushabhCShah 我在视图上设置 isUserInteractionEnabled = true,但它不起作用。
  • 您需要在PlayerView的父级中启用UserInteraction方法。
  • 请在调试器模式下分享您的 UI,并可能分享一些代码以便更好地理解。
  • @EmreCiftci 将图像添加到 ui 调试器模式...我认为问题出在播放器视图中,因为它是 UIWebView。单击播放器后,我无法单击下面 UIView 上的以下按钮。

标签: ios uibutton


【解决方案1】:

控件是否对事件(例如触摸)做出反应,取决于它是否是first responder
如果事件是触摸,则发生触摸的 UI 元素将成为第一个响应者。这适用于例如到UIButton
由于只要您不播放视频,您的按钮就会起作用,这意味着它们已启用用户交互,并且已分配目标操作。
当您播放和停止视频时,只有UITextField 但没有按钮可以成为第一响应者,这对我来说意味着只有UITextField 是可以点击的视图,而不是UIButtons。所以UIButtons 必须被其他不响应点击的视图覆盖。
要检查这一点,我建议您在断点处停止您的应用程序,然后在 Xcode 调试区域中点击 Debug View Hierarchy 按钮:

然后,你应该看看你的按钮是否被其他东西覆盖了。

编辑:

还有一个想法:可能由于某种原因,您的按钮的属性canBecomeFirstResponder 不是true(请参阅here)。请在调试器中检查。如果它是false,您可以通过将其显式设置为true 来获得成功。为此,您必须对按钮进行子类化,并将此 var 覆盖为

override var canBecomeFirstResponder: Bool {
  return true
}  

here

【讨论】:

  • 感谢您的回答,莱因哈德。我在上面添加了播放器视图层次结构,您可以查看最后一个链接。不幸的是,我没有看到按钮上有任何重叠。
  • 我尝试设置canBecomeFirstResponder,但没有成功。
【解决方案2】:

发现问题。 selectedRateView 的高度约束为 0,优先级为 1000。即使代码试图设置它的框架,这也会导致视图的高度为 0。由于某种原因,子控件仍然可见;但不接收事件。

出于某种原因,旧版本的 iOS 并未强制执行此操作。 selectedRateView 是在代码中设置框架时指定的高度,它的子级正在接收触摸事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 2016-01-06
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多