2017-08-03 1 views
0

Ich erstellte eine Ansicht programmgesteuert, wie ein Popup, das von oben mit etwas Text und Bildern dort kommt!Fehler beim Versuch, in einer Ansicht zu klicken, die programmgesteuert erstellt wurde 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 

und dann versuche ich eine UITapGestureRecognizer zu dieser Ansicht, wie diese in einem Setup-func hinzufügen, die in der init aufgerufen wird.

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

im diese Ansicht wie dies in einer UITableViewController Zugabe:

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!) 

Aber wenn ich auf der Ansicht tippen nichts passiert, aber wenn ich wiederholt auftritt über und über diesen Fehler tippen:

< _UISystemGestureGateGestureRecognizer: 0x174186f50>: Geste: Fehlgeschlagen , um Systemgestenstatusbenachrichtigung vor der nächsten Berührung zu empfangen

Aber ich kann nicht scheinen, eine Antwort dafür zu finden, konnte mir jemand pls helfen! Vielen Dank!

hier ist die GitHub Link https://github.com/Coimbraa/AlertsPopup_framework für meinen Rahmen

+0

Erstellen Sie 'alert' und' tap' und dann 'alert? .addGestureRecognizer (tap) 'alle in einer' PopupView' Funktion? Alles innerhalb einer Zellenunterklasse? Und 'self.teste' ist * auch * ein Func in dieser Klasse? Und 'self.view.addSubview (self.popView!)' Ist *** auch *** innerhalb dieser Klasse? Es könnte helfen, wenn Sie einfach die ganze Klasse veröffentlichen, damit wir sehen können, wann/wo Sie diese Bits Code ausführen ... – DonMag

+0

krank hier den gitHub Link zu meinem Projekt verlassen https://github.com/Coimbraa/AlertsPopup_framework im Versuch um ein Framework zu erstellen und in anderen Klassen aus dem Hauptprojekt im Implementieren dieses Frameworks – mastercoder

Antwort

0

Nahm einen Blick auf Ihre GitHub Repo - "" Couple Notizen ...

ich viel zu sehen in Ihrem Code. Jeder von ihnen ist ein potenzieller Absturz. Zum Beispiel musste ich einige Änderungen vornehmen, um sie überhaupt ausführen zu lassen (ich habe nicht die Image-Assets, die der Code erwartet).

In PopUpView.swift Änderung der init() func dazu (addierten gerade den clipsToBounds Linie):

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

Nun, wenn Sie anrufen popView?.toggleStatus() Sie wahrscheinlich nicht etwas sehen.

Ihr PopupView "Container" hat eine Höhe von Null. Ohne seinen Inhalt zu beschneiden, sehen Sie den Inhalt, aber Sie können nicht damit interagieren.

änderte ich die Animation Block in toggleStatus() dazu:

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 
    // ... 

und ich konnte nun anzapfen und das Textview bearbeiten, und tippen Sie an anderer Stelle und print("pressed") Ausgabe an die Debug-Konsole erhalten.

Ich habe nicht weiter gegraben, also weiß ich nicht, ob/wo Sie zusätzlichen Code setzen müssen, um die Rahmenhöhe auf Null zurückzusetzen (oder vielleicht wird es versteckt oder entfernt, was auch immer).

+0

Yeah du bist Richtig, ich weiß das über die Bilder, die ich immer noch daran arbeite, also habe ich sie nicht in die Assets-Datei geschrieben, tut mir leid, und das Chaos mit meinem Code funktioniert immer noch daran xd und ja, es scheint jetzt zu funktionieren! für deine Zeit, meinen Code zu überprüfen und für deine hilfreichen Tipps!: D – mastercoder

0

Try this:

alert.isUserInteractionEnabled = true 

Setzen Sie diese Eigenschaft auf true für die Ansichten, die Sie tippen auf möchten (wo man den Hahn Gestenerkenner hinzufügen).

+0

hat nicht funktioniert :(Ich könnte etwas falsch machen, dass ich immer noch nicht finden – mastercoder

0

Sie fügen diese benutzerdefinierte Alert-Ansicht im Tabellenansicht-Controller hinzu.

Versuchen Sie zuerst, was Tung Fam hat vorgeschlagen, wenn es nicht funktioniert, dann,

Der Versuch, wie es auf Fenster und fügte hinzu:

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

Auch der Rahmen des Fensters auf den popupView gesetzt.

+0

funktioniert nicht, es wird immer noch nicht klicken und erscheinen die gleichen Fehler – mastercoder

0

Wie ich sehe, Sie stellen Ziel für TapGesture als selbst in

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

Hier self ist Gegenstand von UIView (Ihre Warnung vor Ansicht).

Entsprechend dieser Zeile muss Ihr tapGesture Listener in alert? Klasse implementiert werden. Und Sie müssen ein benutzerdefiniertes Protokoll oder einen benutzerdefinierten Delegaten verwenden, um die Aktion von tapGesture in anderen Klassen zu erhalten.

Verwandte Themen