2016-06-24 6 views
0

クラスAでメソッドを定義したいと思います。クラスAのi-n-s-t-a-n-c-e-サブクラスでメソッドを上書きする必要があります。サブクラスのインスタンスはNSArrayに格納されます。私はデリゲートを使ってみました。しかし、それは動作しませんでした。私はHow do I create delegates in Objective-C?http://www.tutorialspoint.com/ios/ios_delegates.htmのようにオンラインで投稿されたいくつかの記事をチェックしましたが、私の目標を達成するために使用できるものではありません。これに精通している人なら誰でも私にヒントをくれますか?例えばObjective-Cでメソッドをオーバーライドしてサブクラスを一時的に定義する方法はありますか?

IはUICollectionViewCellためBaseClassのと呼ばれる基本クラスを作成し、BaseClassの内部ActionMethodがあります。別の収集セルをクリックすると、別のアクションが発生します。したがって、BaseClassから継承した各セルに対して、サブクラスを定義して、異なる動作を実装します。次に、各サブクラスのActionMethodを上書きする方法は?

+2

何によって書き換え可能ですか? – dan

+0

@dan不明な点は申し訳ありません。つまり、各インスタンスがクラスAのメソッドを定義する方法を持つことができます。 –

+0

これらのインスタンスのそれぞれをAの別のサブクラスにすることはできますか?そうでない場合は、各インスタンスにどのメソッド実装を使用するかを決定するのは何ですか?あなたは本当にこの質問が答えるために達成しようとしているもののより具体的な例が必要です – dan

答えて

0

ここでは代議員が働きます。もう1つの選択肢は、コールバックブロックを使用することです。

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

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

として使用

@interface Cell : NSObject 

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

- (void)actionMethod; 

@end 

@implementation Cell 

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

@end 

あなたが見ることができるように、あなたはあなただけ動的にすべてのセルにそのコードを追加することができ、サブクラスを必要としません。

0

は、をオーバーライドし、を上書きしません。メソッドをオーバーライドします。 Objective-Cでは、サブクラスにという全く同じメソッドシグネチャと同じ実装を入れる以外に何もする必要はありません。

+0

.mファイル内でサブクラスを一時的に定義する方法は? –

+0

Javaの匿名の内部クラスのような意味ですか? Objective-Cにはそういうものはありません。追加のクラスを.mファイルに定義するには、それらのために '@interface'と' @ implementation'sを宣言します。しかし、サブクラス化する代わりに、[ここ](http://goshdarnblocksyntax.com/)で説明されているように、各セルに対して動的に設定できるアクションメソッドを*ブロック*にすることを検討したいかもしれません。 – NRitH

0

一般に、getEnclosingRectangle、getShapeAreaなどのすべてのシェイプに共通のメソッドセットを持つシェイプなどの基本クラスを定義します。次に、楕円、多角形などのシェイプの個別のサブクラスを定義します。長方形と三角形。楕円から派生した円など、それらの図形のサブクラスを定義することもできます。次に、NSArrayにすべての楕円、長方形、三角形などを格納し、それぞれにgetAreaメソッドを呼び出します。また、それぞれのクラスには特定のgetAreaメソッドが定義されています。

関連する問題