2010-12-02 13 views
2

Ich schreibe eine benutzerdefinierte Unterklasse von UITableView. Ich würde dieses Objekt selbst als eigene Datenquelle und als Delegat benötigen, und diese Unterklasse hätte dann ihre eigene Datenquelle und Delegate. Dies geschieht hauptsächlich, damit ich Aufrufe an die Datenquelle abfangen und sie delegieren und potenziell erweitern kann, bevor ich sie an ihre tatsächlichen Datenquellen sende.Problem mit einer benutzerdefinierten Unterklasse von uitableview

Meine Klasse ist so definiert.

CustomTableView : UITableView<UITableViewDelegate, UITableViewDataSource> { 
    ... 
    id customDataSource; 
    id customDelegate; 
} 

Das Problem kommt, wenn ich versuche, meine Datenquelle und delegieren.

Ich möchte UITableView Eigenschaften außer Kraft zu setzen:

- (void)setDataSource(id<UITableViewDataSource>)ds { 
    [super setDataSource:self] 
    customDataSource = ds; 
} 

Grundsätzlich möchte ich die Elternklasse (UITableView) sagen, um die Datenquelle selbst zu setzen. Ich würde dann alle Callbacks an die customDataSource weiterleiten, nachdem ich sie geändert habe.

[super setDataSource: self] stürzt nicht ab, aber die Datenquelle wird nie gesetzt. Hat jemand irgendwelche Ideen? Danke

Antwort

2

Ich brauchte nicht die in dieser Frage vorgeschlagene Methode zu verwenden, aber ich habe es funktioniert. Das Problem war, dass ich versehentlich die zu überschreibenden Eigenschaften synthetisiert hatte, nämlich dataSource und delegate.

Für Personen, die dies in Zukunft tun müssen, überschreiben Sie einfach setDelegate und setDataSource in Ihrer benutzerdefinierten Unterklasse.

0

Weisen Sie die Datenquelle nicht zu. Erstellen Sie ein Zwischenobjekt, das Sie in Ihrer CustomTableView enthalten, und legen Sie die Datenquelle auf diese fest. Nennen Sie es DataSourceInterceptor oder so.

Eine andere Möglichkeit, dies zu erreichen, wäre das Methodenswizzle des Datenquellenobjekts, das gesetzt wird.

Verwandte Themen