UIButton hält UIScrollView scrollen in Swift
Meine UIScrollView Bereich ist das scrollen perfekt, außer, wenn der Benutzer drückt auf einen der buttons:
var button:UIButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
button.frame = CGRectMake(0,0,self.width, self.menuHeight)
button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
button.tag = Int(itemNo)
scrollView.addSubview(button)
und die buttonClicked-code:
func buttonClicked(sender:UIButton)
{
var tag = sender.tag
println(tag)
}
Scheint es, dass die TouchUpInside Methode behält die Kontrolle, auch wenn der Benutzer bewegt seine finder Weg von der Taste. Was ist der beste Weg, um meine UIScrollView Bereich zu scrollen zuverlässig?
InformationsquelleAutor iphaaw | 2014-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, die
delaysContentTouches
Eigenschaft desUIScrollView
zuNO
.Können, können Sie auch festlegen
canCancelContentTouches
EigenschaftYES
. (Es istYES
standardmäßig, aber nur für den Fall.)Referenz (Von docs) :
canCancelContentTouches : Ein boolescher Wert, der steuert, ob der Schliff in der Inhalts-Ansicht führen immer wieder zu verfolgen.
delaysContentTouches : Ein boolescher Wert, der bestimmt, ob die scroll-view Verzögerungen der Handhabung der touch-down-gesten.
Sorry, mein Fehler. Für iOS 7
delaysContentTouches
auf NEIN.Testen Sie es, aber ich habe die Lösung gefunden. Schreibe ich eine Antwort mit Erklärung, warum es funktioniert und funktioniert nicht, weil die Antwort, die ich gefunden funktioniert aber nicht gut erklärt.
InformationsquelleAutor aksh1t
Dies könnte für swift. Es funktionierte für mich in iOS 7.1. Xcode 5.1.1 ohne swift.
Die Antwort wurde entnommen aus:
ScrollView nicht scrollen beim ziehen mit der Maus auf Schaltflächen
PREREQUSITS: UIScrollView Unterklasse, Xcode 5.1.1, iOS 7.1., UIButtons bleiben an festen Positionen, während die UISV scrollen, einige Tasten in Ihrem UISV Hinzugefügt, wie die Untersichten
THEORIE:
-In Ihr .m-Datei des UISCV Unterklasse implementieren:
Wenn du jetzt gehen Sie mit dem SV außerhalb der Schaltfläche Rahmen (die Sie Hinzugefügt haben), sehen Sie die layoutSubview-Methode aufgerufen wird, und die änderung der contentOffset position, wie Sie Blättern. Ich benutzte die .x-Koordinate, da habe ich horizontale scrollen (nutze .y wenn Sie einen vertikalen Bildlauf). Jedoch, wenn Sie klicken Sie auf Ihre Schaltfläche, werden Sie sehen, touchesShouldBegin genannt wird, mit den richtigen touch-position, die Sie gedrückt halten. Allerdings, wenn Sie halten Sie Ihren finger auf den button und versuchen Sie, ziehen Sie kein scrollen auftreten und layoutSubviews nicht aufgerufen werden. Hier ist das problem. Jetzt haben Sie Ihre Note aber nicht Ihre scrollen. Je mehr Tasten, die Sie haben, desto weniger "scrollen Chancen" Sie haben da jede Berührung bewegt sich nicht mehr.
LÖSUNG 1 - TEILWEISE
Wenn Sie NICHT zurück in touchesShouldBegin werden Sie in der Lage zu scrollen auch die Tasten berührt werden, aber das touch-Ereignis wird nicht registriert werden, wie geschrieben steht in der docs(CTRL + F "touchesShouldBegin")
Daher kein touch-event registriert werden, die durch Ihre scrollview. Auf dieser link
jemand vorgeschlagen, um UIImageViews anstelle von Schaltflächen und verwenden Sie Ihre frame-Größen. Mit der frame-Größen könnte man dann überprüfen, ob die positionInScene (CGPoint) passt in jeden Rahmen und wenn es nicht die Methode aufrufen, die nicht Ihre Tasten funktionieren.
LÖSUNG 2 - VOLL
1.Hinzufügen:
Ihrer Unterklassen UISV .m Datei in der init-Methode.
2.Hinzufügen:
Ihrer Unterklassen UISV .m-Datei.
Wenn Sie Ihre app nun sehen Sie zu, dass Sie auf eine Schaltfläche berühren beide layoutSubviews und touchesShouldBegin aufgerufen werden. Das scrollen funktioniert. Es funktioniert aber immer noch nicht, rufen Sie die Methode für die Schaltfläche. Der Grund dafür ist, dass die touchEvent wird abgesagt und nach der Berührung aufgehoben wurde, tracking ist nicht möglich. Lesen Sie die docs (CTRL + F "canCancelContentTouches") :
Da Sie Ihre Schaltfläche, um :
myButtonPressed wird nicht aufgerufen werden, da UIControlEventTouchUpOutside aufgetreten. Wenn Sie dies ändern :
und führen Sie den code erneut haben Sie nicht nur Blättern, sondern klicken Sie auf die Schaltfläche mit weiter Blättern, da Sie Ihre Schaltfläche jetzt fordert der Selektor, Wann und EventTouchCancel Auftritt, was es wird, da lassen Sie Sie UISV verwandeln ein touchBegin-in eine touchCancelled mit der :
Vergessen Sie nicht zu überschreiben (hinzufügen):
Funktioniert es nicht ohne Sie. Bitte geben Sie feedback, da ich hoffe, dass diese Arbeit in swift, die werde ich beginnen, bald. Hoffe, es half. Gl & hf 🙂
InformationsquelleAutor MB_iOSDeveloper