Touches begann in UITableViewController

8

Ich definiere diese Methode in meiner UITableViewController-Unterklasse:

%Vor%

aber es wird nicht ausgelöst. UIViewController ist eine Unterklasse von UIResponder, also sollte es funktionieren, oder? Danke

    
sumderungHAY 08.06.2011, 22:53
quelle

5 Antworten

4

Ja, das sollte definitiv funktionieren.

Stellen Sie sicher, dass Benutzerinteraktion aktiviert für die Ansicht aktiviert ist, der dieser Controller entspricht.

Wenn die Ansicht von einer nib / xib geladen wird, stellen Sie sicher, dass der Eigentümer der Datei auf den entsprechenden Klassennamen eingestellt ist und die view -Ausgabe des Dateieigentümers mit der richtigen Ansicht verbunden ist.

Update: Ich sehe auch dieses Verhalten mit einer App, die mit der Nav-basierten App-Vorlage erstellt wurde, aber mit einer View-basierten App-Vorlage funktioniert es wie erwartet.

Ich denke, dass im Fall eines Navigations-Controllers die in den View-Controller eingebettete Tabellenansicht das Ereignis erhält, bevor der View-Controller dies tut. Siehe die UIView-Referenz (Hervorhebung von mir):

  

View-Controller sind sie selbst   Nachkommen der UIResponder-Klasse   und werden in den Responder eingefügt   Kette zwischen der verwalteten Stammansicht   und seine superview, die typischerweise   gehört zu einer anderen Sichtweise   Regler. Wenn die View-Controller-Ansicht kein Ereignis behandelt ,   View-Controller selbst hat die Option   der Handhabung des Ereignisses vor dem Passieren   das Ereignis entlang der Superview.

Dies bedeutet, dass die Ansicht die erste Chance hat, das Ereignis zu behandeln, und wenn dies der Fall ist, wird der View-Controller es nicht bekommen.

Ich weiß nicht genau, was Sie erreichen wollen, daher bin ich mir nicht sicher, welche Lösung ich anbieten soll.

    
zpasternack 09.06.2011, 00:23
quelle
5

Wenn Sie versuchen, eine Tastatur in einem UITableViewController zu verwerfen, besteht eine vernünftige Lösung darin, resitFirstResponder in der Methode didSelectRowAtIndexPath des TableView-Delegaten aufzurufen.

%Vor%     
Scott Chin 12.05.2012 21:04
quelle
3

Ich bin gerade auf das genaue Problem als Original-Posting gestoßen. Ich habe das Problem gelöst, indem ich eine Unterklasse von UITableView erstellt und die Methode "touchesBegan" überschrieben habe. Ich habe auch ein Protokoll erstellt, so dass das UITableView eine Methode auf dem UITableViewController aufrufen konnte, die letztlich das Ereignis "touchBegan" behandeln soll.

Hier ist die Kopfzeile für den UITableView-Subtyp:

%Vor%

Und Implementierung:

%Vor%

Und schließlich, die Codefragmente von UITableViewController:

%Vor%

Hoffe, das hilft ...

    
raider33 11.04.2012 20:26
quelle
1

Sie müssen die Berührungen der Responder-Kette weitergeben. Wir können dies tun, indem wir UITableView ableiten und touchesBegan (und andere, falls nötig) überschreiben und dann die Berührungen der Responder-Kette an den UITableViewController übergeben.

UITableViewTouch.h:

%Vor%

UITableViewTouch.m:

%Vor%     
thedeveloper3124 28.12.2012 23:05
quelle
1

Swift Version, weil ich genau dieses Problem hatte:

%Vor%     
tmichaelrogers 15.03.2015 23:07
quelle