2013-01-16 7 views
20

Ich habe eine UIButton, die aus einer Xib-Datei als IBOutlet Eigenschaft eines View-Controllers geladen wird. Ich lege einen Selektor auf die Schaltfläche in der viewDidLoad meiner Ansicht-Controller:UIButton nicht aufrufen Aktion in iOS 5 aber funktioniert in iOS 6

[_myButton addTarget:self action:@selector(mySelector) forControlEvents:UIControlEventTouchUpInside]; 

In iOS 6 alles funktioniert, aber wenn ich auf dem Simulator in iOS 5.0 der Wähler läuft nicht aufgerufen. Die Schaltfläche hebt hervor, wenn sie berührt wird.

Eine andere Sache zu beachten ist, dass die Schaltfläche in einer UIView ist, die eine UITapGestureRecognizer hinzugefügt hat. Die UITapGestureRecognizer für diese Ansicht wird in iOS 5.0 aufgerufen, wenn die Schaltfläche angetippt wird (sie wird nicht in iOS 6 aufgerufen, wo stattdessen der Selektor der Schaltfläche aufgerufen wird).

Ich habe kein Gerät mit iOS 5, also habe ich nicht auf einem Gerät getestet, nur der Simulator.

Weiß jemand, was hier passiert und wie man es löst?

Antwort

24

Sie haben die Ursache des Problems sehr schön erklärt. Auf iOS 5 stört ein UITapGestureRecognizer in der Superview einer Schaltfläche die Aktion der Schaltfläche. Auf iOS 6 haben sie das Problem behoben: Sie haben ein UIView-Ereignis gestureRecognizerShouldBegin: eingeführt, und eine Schaltfläche gibt automatisch NO für ein TAP-Gestenerkennungsprogramm zurück, das an eine Superview angehängt ist.

Für iOS 5 müssen Sie eine Delegate-Methode für die Erkennung der Tippgeste verwenden, um zu verhindern, dass sie erkennt, ob es sich bei der angetippten Ansicht um die Schaltfläche handelt.

+0

Danke für die Erklärung. Ich werde diese Lösung ausprobieren. – Darren

+2

Diese Antwort enthielt den Code: http://stackoverflow.com/questions/13515539/uibutton-not-works-in-ios-5-x-everything-is-fine-in-ios-6-x –

0

In meinem Fall habe ich auch eine allgemeine UITapGestureRecognizer für die Entlassung der Tastatur durch ein Textfeld geöffnet, wenn der Benutzer irgendwo in der Hauptansicht tippen würde.

I dies nur fixiert, indem eine Gestenerkenner Zugabe, wenn die Tastatur

und zeigt dann nach oben (

- (void)keyboardWillShow:(NSNotification *)n oder

- (BOOL)textFieldShouldBeginEditing:(VDTextFieldWithError *)textField sehen), um die Gestenerkennungseinheit zu entfernen, wenn die Tastatur versteckt (also die Entfernung Selektor in der Selektor-Methode des Erkenners selbst)

Verwandte Themen