2016-06-24 1 views
0

Ich möchte eine Methode in einer Klasse A definieren. Die Methode sollte für jede i̶n̶s̶t̶a̶n̶c̶e̶-Unterklasse der Klasse A überschreibbar sein. Die Instanzen von Unterklassen werden in einem NSArray gespeichert. Ich habe versucht, den Delegierten zu verwenden. Aber es hat nicht funktioniert. Ich überprüfte ein paar Artikel online wie How do I create delegates in Objective-C? und http://www.tutorialspoint.com/ios/ios_delegates.htm Aber sie scheinen nicht, was ich verwenden kann, um mein Ziel zu erreichen. Kann mir jemand, der damit vertraut ist, bitte einen Hinweis geben?Wie definiert man vorübergehend eine Unterklasse mit Overriding-Methode in Objective-C?

Zum Beispiel

ich eine Basisklasse namens Baseclass für die UICollectionViewCell und innerhalb der Baseclass gibt es eine ActionMethod. Klicken Sie auf eine andere Sammlungszelle, um eine andere Aktion auszuführen. Also werde ich eine Unterklasse für jede Zelle definieren, die von BaseClass vererbt wurde, um verschiedene Aktionen zu implementieren. Wie überschreibt man dann die ActionMethod für jede Unterklasse?

+2

Überschreiben von was? – dan

+0

@dan Sorry für das Unklare. Ich meine, jede Instanz kann ihren Weg haben, die Methode in der Klasse A zu definieren. –

+0

Kann jede dieser Instanzen eine andere Unterklasse von A sein? Wenn nicht, wie entscheidet man, welche Implementierung der Methode für jede Instanz verwendet werden soll? Sie brauchen wirklich ein konkreteres Beispiel für das, was Sie erreichen wollen, damit diese Frage beantwortbar ist. – dan

Antwort

0

Ein Delegierter würde hier arbeiten. Eine andere Option besteht darin, einen Rückrufblock zu verwenden, z. dynamisch

@interface Cell : NSObject 

@property (nonatomic, copy) void(^onAction)(); 

- (void)actionMethod; 

@end 

@implementation Cell 

- (void)actionMethod { 
    self.onAction(); 
} 

@end 

Eingesetzt als

Cell *cell1 = [[Cell alloc] init]; 
cell1.onAction = ^{ 
    NSLog(@"Action 1"); 
}; 

Cell *cell2 = [[Cell alloc] init]; 
cell2.onAction = ^{ 
    NSLog(@"Action 2"); 
}; 

Wie Sie sehen können, müssen Sie Subklassen nicht benötigen, können Sie einfach zu jeder Zelle diesen Code hinzufügen.

0

Sie meine überwiegende, nicht Überschreiben Methoden. In Objective-C müssen Sie nichts anderes tun, als eine Implementierung mit der exakt gleichen Methodensignatur in die Unterklasse zu schreiben.

+0

Wie definiert man vorübergehend eine Unterklasse innerhalb einer .m-Datei? –

+0

Meinst du wie eine anonyme innere Klasse in Java? Objective-C hat so etwas nicht. Sie können zusätzliche Klassen in einer .m-Datei definieren, indem Sie '@ interface' und' @ implementation' für sie deklarieren. Aber statt Unterklassen sollten Sie vielleicht in Betracht ziehen, die Aktionsmethode zu einem * Block * zu machen, der für jede Zelle dynamisch gesetzt werden kann, wie [hier] erklärt (http://goshdarnblocksyntax.com/). – NRitH

0

Im Allgemeinen definieren Sie eine Basisklasse, z. B. Shape, die über eine Reihe von Methoden verfügt, die allen Formen gemeinsam sind, z. B. getEnclosingRectangle, getShapeArea usw. Anschließend definieren Sie separate Unterklassen von Formen wie Oval, Polygon, Rechteck und Dreieck. Sie können sogar Unterklassen dieser Formen definieren, z. B. einen Kreis, der von einem Oval abgeleitet ist. Dann könnten Sie alle Ihre Ovale, Rechtecke und Dreiecke (zum Beispiel) in einem NSArray speichern und die getArea-Methode für jede von ihnen aufrufen. Und jede würde ihre spezielle getArea-Methode in ihrer Klasse definieren.

Verwandte Themen