0

method を実装しているSAGridMenuクラスがありますalignSARadioMenuタッチ関連のルーチンを実装するクラスもあります。二人とも、それぞれの仕事をうまくこなしている。

SAGridMenu: CCMenu
SARadioMenu: CCMenu

私が今欲しいのは、これら2つのクラスを組み合わせたクラスを作成することです - SARadioGridMenu。Objective C には多重継承がないため、両方からクラスを継承することはできません。それらを組み合わせる最も効率的な方法は何ですか?

更新(説明):

どちらのサブクラスも ivar を使用しているため、カテゴリは最適なオプションではありません。

基本的に、2 つのコードがあります。1. 整列 2. タッチ関連。最終的な目標は、冗長性のない 3 つのクラスを持つことSAGridMenu, SARadioMenu and SAGridRadioMenuです。一時的な解決策として、コードを継承SAGridRadioMenuSARadioMenuてコピーしました。alignより良い解決策が見つかることを願っています。

4

3 に答える 3

0

3 番目のクラスSAGridRadioMenuでCompositionを使用できます。

@interface SAGridRadioMenu : CCMenu {
    SARadioMenu * _radioMenu;
    SAGridMenu * _gridMenu;
}

//You can also create properties here

このようにして、両方の SARAdioMenu、SAGridMenuクラスは再利用可能のままであり、コードをコピーすることなく (冗長性なし)、3 番目のクラスをすぐに使用できます。

問題が解決することを願っています。

于 2013-05-03T07:09:41.027 に答える
0

alignメソッドの具体的な詳細によっては、メソッドやタッチ関連のルーチンをクラス メソッドとして実装できる場合があります。クラス メソッドはCCMenu、必要な ivar をパラメータとして持つ または プロトコルを取ることができます。たとえば、SARadioGridMenuから継承しSARadioMenu、 を呼び出します[SAGridMenu align:self]。align メソッドを呼び出すためにSAGridMenuも呼び出します。[SAGridMenu align:self]

于 2013-05-02T20:37:27.990 に答える