2010-10-11 8 views
11

Ich habe eine UIButton in einer UIView, die in einem UIViewController ist, die ich aus einer .xib-Datei zugeordnet und eingefügt habe.UIButton-Ereignis 'Touch Up Inside' funktioniert nicht. 'Touch Down' funktioniert einwandfrei

Wenn ein IBAction bis zum "Touch Down" -Ereignis einer UIButton angehängt wird, wird es korrekt ausgelöst. Aber wenn ich es an das "Touch Up Inside" -Event anschließe, reagiert es nicht.

Andere Ereignisse funktionieren auch nicht. 'Touch Drag Enter', 'Touch Drag Exit', 'Touch Up Outside' usw. Nur Touch Down.

Hat jemand eine Idee, warum das sein könnte?


Die Schaltfläche ist eine einfache Schaltfläche mit abgerundetem Rechteck in einem View-Controller. Ich habe den View-Controller als solche geladen:

-(void) pushNewViewController 
{ 
    MyViewController* newViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
    [self.view addSubview:newViewController.view]; 
    [newViewController release]; 
} 

Ich habe diese Schaltfläche, um abgerundeten Rect Button MyViewController hinzugefügt, in IB. Ich habe folgende IBActions:

-(IBAction) buttonTouchDown:(id)sender 
{ 
    NSLog(@"Button Touch Down Event Fired."); 
} 

-(IBAction) buttonTouchUpInside:(id)sender 
{ 
    NSLog(@"Button Touch Up Inside Event Fired."); 
} 

Im IB I Menü auf die Schaltfläche geklickt und die Touch Down Steckdose MyViewController gezogen und buttonTouchDown ausgewählt :. Gespeichert die IB xib.

Wenn ich die Schaltfläche ausführen und testen und die Meldung "Button Touch Down Event Fired" abrufen.

Aber wenn ich zurück zu IB und ändern Sie die Aktion zu Touch Up Inside und hook es up to the buttonTouchUpInside: IBAction und speichern. Ich teste noch einmal, ich bekomme keine Antwort.

Grüße, Rich-

+0

Ist diese Frage noch offen? Es stammt aus Oktober, hast du inzwischen eine Lösung gefunden? – Axel

Antwort

2

Sie Speichern erwähnt; Hast du die Xib- und MyViewController-Dateien gespeichert, nachdem du deine Änderungen vorgenommen hast? Wenn so etwas bei mir nicht mehr funktioniert, finde ich, dass ich entweder die XIB in IB oder die Klassendatei in XCode nicht gespeichert habe.

6

Sie veröffentlichen newViewController.

Während die die newViewController.view als Subview Zugabe wird die Ansicht, das Objekt newViewController behalten eine Zählung von 0 behalten haben

2

Haben Sie Touch-Event-Handler implementiert in Code Ihre MyViewController ist?

Es sieht aus wie Ihre UIButton nur berührtBegan Ereignis und das Ereignis wird von etwas abgebrochen, bevor es BerührungenEnded erhalten konnte.

So etwas wie UIScrollView in der Regel tut, wenn es zwischen Touch-Entscheidung, dass es Subviews und einen Drag weitergeleitet werden muss, die von selbst behandelt werden sollte.

+1

Ich kämpfte mit dem gleichen Problem, und das war die Lösung. In meinem Fall hatte ich einen UITapGestureRecognizer in der Elternansicht, der mit der TouchUp-Handhabung zu muckeln schien. – alalonde

0

Lol gut das war dumme Lösung, aber in der Xib hatte ich es mit buttonTouchUp draußen verbunden, und das war das Problem verursacht. Vielleicht hilft das :)

15

Es tut mir leid für die Verspätung, aber ich habe genau das gleiche Problem. In meinem Fall war es eine UITapGestureRecognizer zugewiesene übergeordnete Ansicht. Also, es ist eine gute Idee, nach Recognizern zu suchen.

+4

Ausgezeichnet, das ist richtig. Ich habe die Eigenschaften von GestenRecognizer geprüft und festgestellt, dass es sich um eine "cancelsTouchesInView" handelt, die standardmäßig auf YES gesetzt ist, sie in NO geändert hat und dadurch mein Problem löst. –

+0

Danke! Ein interessantes Symptom war, dass das TouchUp-Ereignis ausgelöst wurde, wenn ich den Knopf für einige Sekunden gedrückt hielt. Es muss sein, dass der TapGestureRecogniser aufgegeben hat und dann das Ereignis ausgelöst hat. –