2011-01-05 6 views
4

Ich habe eine UIPickerView in der Fußzeile einer Tabelle (von der ich plane "Pagination" -Style-Anfragen für die Tabelle ausgeben) - der Picker wird die verfügbaren Seiten auflisten den GROSSEN Datensatz, den ich navigiere, und lasse den Benutzer direkt zu irgendeiner "Seite" der Daten springen.UIPickerView innerhalb von UITableView.tableFooterView erhält keine Zieh Berührungen

Mein Picker erhält Hähne; Wenn ich auf eine Reihe des Pickers tippe, die nicht die ausgewählte ist, rollt sie in den Mittelraum des Pickers. Aber wenn ich meinen Finger auf den Picker ziehe, scrolle ich die TABELLE, nicht den Inhalt des Pickers.

Ich habe versucht, eine UIView-Unterklasse in meiner TableFooterView zu installieren, um zu sehen, ob ich Berührungen erfassen konnte, und ich kann ... aber nicht berührt den Picker. Berührungen um den Picker feuern tatsächlich die UIView-Unterklasse -touchesBegan. Aber nicht diejenigen auf dem Pflücker selbst.

Antwort

8

Hier ist, was am Ende funktionierte.

Ich habe meine Tabelle in eine Unterklasse von UITableView (genannt PickerSensitiveUITableView).

Die implementierte ich diese Methode:

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    UIView* result = [super hitTest:point withEvent:event]; 

    if ([result.superview isKindOfClass:[UIPickerView class]]) 
    { 
      self.scrollEnabled = NO; 
    } 
    else 
    { 
      self.scrollEnabled = YES;  
    } 
    return result; 
} 

So, jetzt, wenn die Berührung innerhalb der Grenzen des Picker kommt es vor der Verschiebbarkeit des UITableView schaltet sich aus (eigentlich jeden Kommissionierer in der Tabelle!).

Es fällt mir eine allgemeinere Lösung wäre, dies als eine Kategorie auf UIScrollView zu tun. Das Problem ist nicht mit Tabellen so sehr wie mit der UIScrollView, dass UITableView ist eine Unterklasse von ...

+0

die Sache mit Kategorien ist, dass Methode überschrieben wird nicht garantiert. – Pacu

+1

Super Lösung, clever und einfach. Erlaubt mir zu ermöglichen Swipe in einer Tabellenansicht in einem horizontalen Scrollview zu löschen. Danke vielmals. – Jukurrpa

+0

Ausgezeichnet, vielen Dank, Dan. – DrMickeyLauer

Verwandte Themen