我的应用中需要一个带按钮的弹出/工具提示。经过一番搜索后,我决定使用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
,作者忘记了一些将交互功能添加回绘制元素的机制。如果有人能够对此有更多的了解,我会很感激。如果忽略点击的原因不同,你能解释一下吗?
由于