Ich habe ein Problem mit einem UIButton, der unter iOS6 einwandfrei funktioniert, aber bis zu einem bestimmten Punkt nicht auf Berührungsereignisse in iOS7 reagiert. Um zu klären, bitte sehen Sie unter Bild:
Die Schaltfläche, die fehlschlägt, ist die Schaltfläche "Alle verwerfen", die sich in der UIView befindet. (Bitte beachten Sie, dass diese Schaltfläche nur vorübergehend deaktiviert ist, und das ist NICHT das Problem. Ich habe gerade keinen Screenshot des neuesten Tests, bei dem die Schaltfläche aktiviert ist.)
Diese Schaltfläche ignoriert alle Berührungen, es sei denn, es wird zuerst die Schaltfläche "Verwerfen" oder "Wiederholen" in der UITableViewCell gedrückt. (Dies führt zu einem Neuladen des View-Controllers, wodurch die Lifecycle-Methoden wie ViewDidLoad erneut aufgerufen werden.) Nachdem entweder die Schaltflächen "Verwerfen" oder "Wiederholen" in der Tabellenansichtszelle gedrückt wurden, funktioniert die Schaltfläche "Alle verwerfen" ordnungsgemäß.
Die Ansicht und die Schaltfläche "Alle verwerfen" basieren auf der XIB-Datei des Controllers und nicht im Code. Dies schlägt nur auf iOS7 fehl und beginnt zu arbeiten, sobald die taleview-Zellenschaltflächen berührt werden.
Hat jemand Ideen?
Danke!
Ich habe letzte Nacht die Lösung gefunden. Okay, was passiert, ist, dass ich die obige Tabellenansicht und die UIView-Elemente auf einen Zielrahmen lege.
Ich bin mir nicht 100% ig sicher, aber es scheint, dass die Tasten in iOS6 auf Ereignisse reagieren, unabhängig davon, wo sie platziert sind. Aus irgendeinem Grund in iOS7, wenn der Button außerhalb des Rahmens sitzt, in dem er sein soll, ignoriert er Berührungsereignisse, obwohl er angezeigt wird.
Ich habe das Problem gelöst, indem ich den Rahmen der Ansicht an der richtigen Stelle positioniert habe, so dass sie die Schaltfläche überlagert.
Wenn ich irgendwelche Dokumentation dazu finden kann, werde ich hier posten.
Danke!
Ich habe gerade mit diesem Problem konfrontiert. Gemäß dem Ratschlag von @Guntis Treulands habe ich mich entschieden, zu überprüfen, was passiert, wenn ich die Methode " hitTest:withEvent:
" in meiner benutzerdefinierten Header-Ansicht überschreibe. Diese Methode ignoriert Ansichtsobjekte, die ausgeblendet sind, Benutzerinteraktionen deaktiviert haben oder einen Alpha-Wert von weniger als 0,01 haben. Diese Methode berücksichtigt den Inhalt der Ansicht nicht, wenn ein Treffer ermittelt wird. Daher kann eine Ansicht auch dann zurückgegeben werden, wenn sich der angegebene Punkt in einem transparenten Teil des Inhalts dieser Ansicht befindet und jetzt, nachdem er überschrieben wurde, Berührungen außerhalb der Grenzen erhält. Es hat den Trick für mich getan. Hoffe es hilft dir, Leute.
Nur als alternative Antwort - Eigentlich für mich hat das nie funktioniert (wenn uibutton außerhalb der Elternansicht ist, wird es keine Berührung erhalten.) - Aber in einigen Fällen ist es erforderlich, dass der Button außerhalb seiner Grenzen ist .
Aus diesem Grund gibt es eine Hittest-Funktion, die außer Kraft gesetzt werden kann - um einfach die übergeordnete Ansicht aller Unteransichten zu überprüfen, um den uibutton zu finden, der außerhalb der Grenzen der Elternansichten platziert ist. (Sie würden dann jede Unteransicht überprüfen, ob es sich um einen uibutton-Typ handelt und ob berührte Koordinaten innerhalb des uibuttons-Rahmens liegen.
Die hittest-Funktion überspringt standardmäßig das Überprüfen von Sichten außerhalb der Grenzen.
Hittest Beispiel: Ссылка .
Nicht sicher, ob das der gleiche Fall ist, aber es könnte verwandt sein:
Wenn sich der UIButton in einer Ansicht mit einem UIGestureRecognizer befindet, der delaysTouchesEnded NICHT auf NO gesetzt hat (Standardwert ist YES), erhält der Button keine TouchUpInside-Ereignisse mehr in iOS 7. Er erhielt die TouchUpInside-Ereignisse in iOS 6.
Wenn möglich, setzen Sie die Eigenschaft delaysTouchesEnded des UIGestureRecognizer auf NO, um das Problem zu lösen.
Das ist komisch, aber ich habe gerade eine neue App für iOS 7 entwickelt und [cell.contentView setUserInteractionEnabled: YES];
für mich eingestellt.
Ich hatte das gleiche Problem - Schaltflächen funktionierten auf iOS6 und nicht auf iOS7, das Problem war mit Container UIView
, zu dem ich UIButtons
hinzufügte, ich füge Constrains zum Container UIView
hinzu und es begann zu arbeiten . Code, den ich in meinem Fall hinzufügen musste:
Wenn das automatische Layout verwendet wird, fügen Sie eine Log-Anweisung in -viewDidAppear hinzu:
%Vor%Wenn das Ergebnis 0 ist (oder nicht groß genug), legen Sie die Höhe von UIView auf einen Wert fest, der größer ist als die Höhe der Schaltfläche "Alle verwerfen".
Ich habe auch das gleiche Problem, aber nach dem Hinzufügen von Code-Tastenaktionen funktioniert ordnungsgemäß cell.contentView.userInteractionEnabled = NO;
Okay, so scheint es, als würden programmatisch in iOS7 erstellte Schaltflächen ihr Ziel nicht aufrufen. Ich weiß nicht warum, aber ich habe die folgende Lösung gefunden:
Fügen Sie im InterFace Builder (oder nib) eine Schaltfläche hinzu und passen Sie sie an und VERSTECKEN Sie sie. ( theButtonInTheNib
);
Machen Sie es IBOutlet-Eigenschaft: @property (strong) IBOutlet UIButton *theButtonInTheNib
Machen Sie die Ziel-IBAction-Verbindung: (IBAction)theTargetAction:(id)sender;
Hier kommt der Trick. Wir werden eine Kopie / Kopien dieser Schaltfläche erstellen:
%Vor%Ich habe die Zielaktion erneut hinzugefügt, aber jede andere Aktion wird funktionieren.
Tags und Links objective-c ios uibutton