无法与UIView交互,自定义drawRect

时间:2016-02-24 15:58:21

标签: ios swift cocoa

我的应用中需要一个带按钮的弹出/工具提示。经过一番搜索后,我决定使用CMPopTipView,因为它最接近我的视觉需求。由于我的代码在Swift中,我决定使用上面工具提示的Swift端口:

https://github.com/MihaelIsaev/SwiftPopTipView

以下是我正在做的简化版本:

let content = UIView()
content.bounds = CGRect(x: 0, y: 0, width: 200, height: 50)

let button = UIButton(type: UIButtonType.Custom)
button.addTarget(self, action: "buttonClick:", forControlEvents: UIControlEvents.TouchUpInside)
button.setTitle("click me", forState: UIControlState.Normal)
button.bounds = CGRect(x: 0, y: 0, width: 60, height: 30)
content.addSubview(button)
button.center = CGPoint(x: content.frame.width / 2, y: content.frame.height/2)

let popup = CMPopTipView(customView: content)
popup.presentPointingAtView(someExistingElement, inView: mainView, animated: false)

工具提示弹出窗口按预期显示,其中的视图按预期显示,但按钮不起作用,buttonClick事件永远不会被触发。我还注意到,如果我把这个弹出窗口置于另一个元素之上,那么即使被弹出窗口阻止,它也会逐渐落到该元素上。

查看CMPopTipView源代码,我没有看到任何会忽略用户交互的内容。实际上,我甚至尝试将以下内容添加到CMPopTipView的presentPointingAtView方法中:

containerView.userInteractionEnabled = true
self.userInteractionEnabled = true
self.customView?.userInteractionEnabled = true

弹出窗口仍然会忽略该点按,然后落到它后面的元素。有趣的是,弹出窗口也有disableTapToDismiss属性,我尝试将其设置为false,如果用户点击其中的任何位置,根据说明应该忽略弹出窗口。该功能也没有效果,显示相同的症状。

在CMPopTipView中进一步查看,我发现没有任何会影响点击处理的方式(GestureRecognizer,点击传递方法等)。我看到的唯一可疑的事情是:

    构造函数中的
  • isAccessibilityElement,删除它没有效果
  • backgroundColor = UIColor.clearColor(),我听说有时会触发坠落,但即使将其更改为不透明也无效
  • drawRect覆盖,这似乎是最后剩下的罪魁祸首,我想知道是否通过覆盖原作drawRect,作者忘记了一些将交互功能添加回绘制元素的机制。

如果有人能够对此有更多的了解,我会很感激。如果忽略点击的原因不同,你能解释一下吗?

由于

修改 以防万一,这里是一个如何呈现弹出窗口的图像(在这种情况下,我有更多的样式,我在上面的代码中省略): screenshot

0 个答案:

没有答案