2017-08-03 25 views
0

我以编程方式创建了一个视图,就像从顶部弹出的弹出窗口,其中包含一些文本和图像!尝试点击以编程方式创建的视图时发生错误swift 3

alert = UIView(frame: CGRect(x: 0, y: 0, width: self.frame.width , height: 0)) 
alert?.frame.origin.y = (textLable?.frame.height)! 
alert?.frame.size.height = (textLable?.frame.height)! 
alert?.backgroundColor = self.arrayOptions.colorBackground 

,然后我想一个UITapGestureRecognizer添加到设置FUNC内像这样的观点,即是所谓的初始化。

let tap = UITapGestureRecognizer(target: self, action: #selector(self.teste)) 
tap.numberOfTapsRequired = 1 
alert?.addGestureRecognizer(tap) 

IM添加像这样的观点在一个UITableViewController:

self.popView = PopupView(frame: CGRect(x: 0 , y: 0 , width:self.view.frame.width, height: 0), with: PopUpOptions.error, originY: 0,description:"blablabla") 
self.view.addSubview(self.popView!) 

但是,当我点击后没有任何反应,但是当我点击重复一遍又一遍地出现此错误时的观点:

< _UISystemGestureGateGestureRecognizer:0x174186f50>:手势:失败 在下次触摸前接收系统手势状态通知

但我似乎无法找到答案,任何人都可以帮助我! 谢谢!

这里是GitHub的链接https://github.com/Coimbraa/AlertsPopup_framework我的框架

+0

你是否在'PopupView'函数中创建了'alert'和'tap',然后'alert?.addGestureRecognizer(tap)'?所有在一个单元格子类中?而'self.teste'也是*该类内的func?并且'self.view.addSubview(self.popView!)'在该类中也是***?它可能会帮助,如果你只是发布完整的类,所以我们可以看到你何时何地运行这些代码... – DonMag

+0

虐待离开这里gitHub链接到我的项目https://github.com/Coimbraa/AlertsPopup_framework即时尝试建立一个框架和从主项目实施该框架 – mastercoder

回答

0

看了一下您的GitHub库 - !“”夫妇笔记...

我看到了很多的在您的代码中。其中每一个都是潜在的崩溃。例如,我必须进行一些编辑才能让它运行(我没有代码期望的图像资源)。

PopUpView.swift变化init() FUNC这个(刚刚添加的clipsToBounds线):

override public init(frame: CGRect) { 
    super.init(frame: frame) 
    setup() 
    self.clipsToBounds = true 
} 

现在,当你调用popView?.toggleStatus()你可能不会看到什么

PopupView“container”的高度为零。如果没有剪辑其内容,您的请参阅的内容,但您无法与其互动。

我改变你的动画块toggleStatus()这样:

UIView.animate(withDuration: 0.5, animations: { 
     if let sz = self.alert?.frame.size { 
      self.frame.size.height = sz.height 
     } 
     self.alert?.frame.origin.y = (self.startY)! + (self.status ? 0 : -((self.textLable?.frame.height)! + self.startY)) 
    }) { (finished:Bool) in 
    // ... 

,我现在可以挖掘和编辑的TextView,和其他地方挖掘并得到print("pressed")输出到调试控制台。

我没有进一步挖掘,所以我不知道是否需要放置额外的代码来将框架高度重置为零(或者可能会隐藏或移除,无论如何)。

+0

是的,你是正确!我知道那些图像仍在工作,所以我没有把它们放在资产文件中,但对此抱歉,而且我的代码仍然在xd上工作,是的,它似乎现在正在工作!非常感谢您的时间审查我的代码和您的有用的技巧!:D – mastercoder

0

试试这个:

alert.isUserInteractionEnabled = true 

将此属性设置为true您要挖掘上(在其中添加点击手势识别器)的意见。

+0

没有工作:(我可能做错了什么,我仍然没有找到 – mastercoder

0

您正在表格视图控制器中添加自定义警报视图。

首先尝试董先生秘境曾建议,如果它不工作,那么,

试图将它放在窗口,如:

self.view.window.addSubview(self.popView!) 

还设置窗口的popupView的框架。

+0

不工作,它仍然不会点击并出现相同的错误 – mastercoder

0

正如我看到你在

let tap = UITapGestureRecognizer(target: self, action: #selector(self.teste))

这里self为TapGesture设定目标自我是UIView的(你的警报视图)的对象。

所以根据这条线你的tapGesture听者必须在alert?类中实现。而且您需要使用自定义协议或自定义委托来在其他类中获取tapGesture的操作。

相关问题