UIButton funktioniert nicht ordnungsgemäß in iOS 7

8

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!

    
Retief Fourie 30.09.2013, 14:14
quelle

10 Antworten

17

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!

    
Retief Fourie 01.10.2013, 06:59
quelle
7

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.

%Vor%     
Neil Galiaskarov 04.03.2014 17:10
quelle
2

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: Ссылка .

    
Guntis Treulands 11.10.2013 09:08
quelle
1

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.

    
Marcel W 11.10.2013 08:52
quelle
1

Das ist komisch, aber ich habe gerade eine neue App für iOS 7 entwickelt und [cell.contentView setUserInteractionEnabled: YES]; für mich eingestellt.

    
user920877 07.11.2013 19:24
quelle
1

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:

%Vor%     
Michal Gumny 03.12.2013 16:24
quelle
0

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

    
Nianliang 15.11.2013 13:10
quelle
0

Überprüfen Sie, ob die Schaltfläche im übergeordneten Rahmen

ist     
david72 14.01.2015 22:06
quelle
0

Ich habe auch das gleiche Problem, aber nach dem Hinzufügen von Code-Tastenaktionen funktioniert ordnungsgemäß cell.contentView.userInteractionEnabled = NO;

    
Anjaneyulu Battula 30.10.2015 09:15
quelle
-1

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:

  1. Fügen Sie im InterFace Builder (oder nib) eine Schaltfläche hinzu und passen Sie sie an und VERSTECKEN Sie sie. ( theButtonInTheNib );

  2. Machen Sie es IBOutlet-Eigenschaft: @property (strong) IBOutlet UIButton *theButtonInTheNib

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

    
user3579410 27.04.2014 22:59
quelle

Tags und Links