1

私の UIView ( ClassA ) にはボタンがあり、押すと別の UIView ( ColorClass ) が表示され、ユーザーが色を選択できる 3 つのボタンが表示されます。選択された色は、処理できるようにClassAに戻されます。また、選択した色を保存するためにStorage (シングルトン) クラスにも渡されます。

これはうまく機能しますが、同じ機能を持たせるには、関連のない2番目のクラスClassBが必要です。しかし、通常ClassB内からClassAで呼び出すのと同じメソッドを呼び出すと、ClassAが更新されます。

ColorClassを呼び出し元のクラスにとらわれないようにするにはどうすればよいですか? 私はまだ学んでいるので、誰かが私を正しい方向に向けるのを助けることができれば、それは素晴らしいことです.

クラスA

- (void) showColorPicker{
    CGRect colorPickerFrame = CGRectMake(150, 100, 237, 215);
colorPicker= [[ColorClass alloc] initWithFrame:colorPickerFrame];
    colorPicker.vc = self;
    [self.view insertSubview:colorPicker aboveSubview:self.view];
}

- (void) setTheButtonColor : (int) c {

    Sufficient to say this just changes the buttons background color selected from a list of colors 
}

カラークラス

選択した色が押されると、ClassA にその色を通知するこのメソッドを呼び出します。

- (void) buttonPressed : (id) sender {
        [self.vc setButtonColor:[sender tag]];
    [myStorage setButtonColor:[sender tag]];
}

レイアウト

4

2 に答える 2

3

を使用する必要がありますdelegation- のデータを提供するときのようにUITableView、クラスが正確に何であるかはわかりません。指定された を実装するだけです@protocol

提供されるコールバックを記述する独自のプロトコルを定義します (これは ColorClass.h に含まれます)。

@protocol ColorClassDelegate < NSObject >

- (void)colorPicker:(ColorClass *)colorPicker didPickColor:(UIColor *)color;

@end

次に、ColorClass(再び .h ファイル) に、デリゲートのプロパティがあります。

@property (weak, nonatomic) id < ColorClassDelegate > delegate;

色を選択した場合 (ボタンを押した場合):

- (void) buttonPressed : (id) sender {
    // delegate
    [self.delegate colorPicker:self didPickColor:   ## get the colour here ##   ];

    // persistent store
    [myStorage setButtonColor:[sender tag]];
}

そして、カラー ピッカーを使用するすべてのクラスは、ColorClassDelegateプロトコルを実装します。

#import "ColorClass.h"

@interface ClassA < ColorClassDelegate >

そして、自分自身をカラー ピッカー デリゲートとして設定します。次に、以下を実装します。

- (void)colorPicker:(ColorClass *)colorPicker didPickColor:(UIColor *)color
{

    // do something with the colour

}

元のコードは、ボタン タグを渡して色を表現していました。デリゲート メソッドで色を渡す代わりに、それを行うことができます。

于 2013-05-10T18:50:20.140 に答える
0

デリゲートよりも少し複雑ではあるが疎結合の別のソリューションは、NSNotificationを使用することです。

色が選択されたときに通知を爆破します。

私が提供できるサンプルコードが必要な場合は、NSNotificationは非常に簡単です。

于 2013-05-10T19:15:18.973 に答える