Wie die Methode aufzurufen, die aufgerufen worden wäre, wenn der Delegierte nicht da waren

stimmen
3

Ich bin ein optionales Delegatmethode auf dem Cocoa Touch - API implementiert. Was ich möchte , ist zu tun, zuerst die Methode aufrufen, würde genannt worden , wenn ich nicht die Delegierten geführt hat ... dann Änderungen vornehmen , um das Ergebnis ... dann meine modifizierte Version zurück.

Hier ein Beispiel:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; {
  /* this line: */ UIView * headerView = [someObject tableView:tableView viewForHeaderInSection:section];
  [headerView setBackgroundColor:[UIColor redColor]];
  return headerView;
}

Die markierte Zeile funktioniert nicht. Ich konnte someobject = tableView.delegate setzen, aber das gibt mir nur eine unendliche Rekursion. Gibt es einen Trick, den Tableview tun zu machen, was es tun würde, wenn die optionale Methode nicht implementiert wurde? Ich bin nicht super hoffnungsvoll, aber es wäre cool, wenn möglich.

Veröffentlicht am 27/08/2009 um 03:51
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
6

Es gibt keine Methode, die aufgerufen worden wäre, wenn Sie nicht die Delegierten geführt haben. Die Delegierten sind nicht wie Unterklassen; sie sind keine Sprache-Funktion. Die UITableView (in diesem Fall), hat einige Arbeit, sieht zu sehen, ob seine -delegate Eigenschaft ist nicht nil (die nur eine zufällige Ivar ist die „delegieren“ genannt werden geschieht), wenn so sieht es der Delegat implementiert die Delegierten Methode, ruft sie, wenn es funktioniert, dann etwas mehr Arbeit macht.

UITableView keinen Standard Abschnitt Kopfsicht aussetzen (es ist eine private Unterklasse genannt UISectionHeaderCell glaube ich), so Apple keine Versprechungen zu machen, wie es umgesetzt wird. oder gibt uns eine gute Art und Weise ahold davon zu bekommen Es gibt mehr Möglichkeiten, um die Ansicht in Frage zu kommen, aber Apple hat noch nicht gegeben, um uns jede unterstützte Art und Weise, die ich kenne.

Aber auf die allgemeine Frage über die Delegierten, was Sie fragen, ist nicht vorhanden, weil es nicht ist, wie die Delegierten umgesetzt werden.

Beantwortet am 27/08/2009 um 04:31
quelle vom benutzer

stimmen
3

Schauen Sie sich die Dokumentation auf respondsToSelector- es gibt Ihnen die Möglichkeit zu testen und zu sehen , ob ein Objekt, na ja, an die Wähler reagieren :)

Beantwortet am 27/08/2009 um 03:57
quelle vom benutzer

stimmen
2

Ich vermute, UITableView tut etwas wie folgt aus:

if ([delegate respondsToSelector:@selector(tableView:viewForHeaderInSection:)]) {
    [delegate tableView:self viewForHeaderInSection:section];
} else {
    // Does its own thing instead
}

Also ich glaube nicht, wäre es möglich, für Sie das Original zu erhalten, auf diese Weise.

Beantwortet am 27/08/2009 um 03:56
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more