Meistens habe ich Elemente auf AutoLayout erstellt, aber es gibt einige uiviews, die programmgesteuert erstellt werden. Es gibt ein Ereignis, das einige Logik und UI ändern muss. Alles funktioniert gut, außer programmatisch erstellten uiviews. Sie ändern ihren Zustand erst nach einem zweiten Klick. Wenn ich außerdem auf eine andere programmgesteuerte uiview klicke, verlieren die vorherigen uiviews ihren aktuellen Status und kehren auf den Standardwert zurück. Wahrscheinlich könnte es ein Problem mit Threads geben, ich habe einige Kombinationen von dispatch_async
versucht, aber es hat nicht geholfen. HierProgrammatisch erstellt uiview reagiert nicht auf den ersten Klick
ist das Ereignis:
func actFilterComfort(sender: UIButton) {
let subview = self.labelSettingViewComfort.subviews[0] as UIView
let imageView = sender.superview?.viewWithTag(120) as! UIImageView
if(!filters.comfort) {
filters.comfort = true
filters.comfortImage.frame = CGRectMake(self.comfortDisplay.frame.origin.x + (CGFloat(filters.counter) * 10.0), 0.0, 20.0, 20.0)
self.comfortDisplay.hidden = true
subview.addSubview(filters.comfortImage)
subview.sendSubviewToBack(filters.comfortImage)
imageView.alpha = 1
filters.counter += 1
}
else {
filters.comfort = false
imageView.alpha = 0
filters.comfortImage.removeFromSuperview()
if(filters.counter == 1) {
self.comfortDisplay.hidden = false
}
else {
self.alignFiltersImages(subview, counter: filters.counter)
}
filters.counter -= 1
}
}
imageView
ist ein programmatisch erstellt uiview. Es sollte sein Alpha ändern, aber es tut es nicht. Andere Dinge funktionieren gut.
Nein, es funktioniert nicht beim ersten Mal. Ich denke, das Problem hängt mit der Definition dieser uiview zusammen. Weil es nicht nur beim ersten Klick funktioniert. Dann fängt es an gut zu funktionieren. Es scheint so, als ob uiview beim ersten Klick definiert wird und irgendwo im Thread gespeichert wird und erst danach seine Eigenschaften ändert. – Slava
Ändern Sie den Anfangswert von filters.comfort, wenn es wahr ist, ändern Sie es mit false und wenn es falsch ist, ändern Sie es mit true –