2

私の問題は次のとおりです

UISegmentedController と、インターフェイス ビルダーでレイアウトした 4 つのテーブルビューを保持する UIViewController サブクラスがあります。

@interface MultiTableHoldingView : UIViewController{

}

@property (strong, nonatomic) IBOutlet DataTV *dsDataTV;
@property (strong, nonatomic) IBOutlet EnviroTV *dsEnvironmentTV;
@property (strong, nonatomic) IBOutlet LocationTV *dsLocationTV;
@property (strong, nonatomic) IBOutlet Note_AnimalTV *dsNoteAnimal;

@property (strong, nonatomic) IBOutlet UISegmentedControl *diveElementSegmentController;

@property (strong, nonatomic) DiveSite* currentSite;

- (IBAction)diveElementSegmentControllerDidChange:(UISegmentedControl *)sender;

-(void) setFreshWaterColor;
-(void) setSaltwaterColor;

@end

setFreshWaterColor と setSaltWaterColour は、MultiTableHoldingView インスタンスの UIView とそれに含まれる 4 つのテーブルビューの背景色のプロパティを設定するだけです。これらのメソッドは両方とも、MultiTableHoldingView の viewDidLoad メソッドから呼び出されたときに正常に機能します。それらの1つをここに示します

-(void) setSaltwaterColor{

    DLog(@"in set salt water colour");
    self.view.backgroundColor= SaltWaterColor;
    _dsLocationTV.backgroundColor=SaltWaterColor;
    _dsDataTV.backgroundColor=SaltWaterColor;
    _dsEnvironmentTV.backgroundColor=SaltWaterColor;
    _dsNoteAnimal.backgroundColor=SaltWaterColor;

}

もう 1 つは、FreshWaterColor に設定することを除いて同じです。両方とも、私が設定した #define です。

segmentedController を使用して、さまざまなテーブルビューの隠しプロパティのオンとオフを切り替えます。すべてが素晴らしくシンプルです。テーブルビューはデータを取り込みます。正常に動作しています。

テーブルビューの1つでテーブルビューセルの1つを選択すると、テーブルビュー(実際にはすべてのテーブルビュー)とスーパービューであるUIViewの両方の背景色を変更したい

self.superview.backgroundColor = FreshWaterColor;

MultiTableHoldingViewビューのバックグラウンドプロパティのインスタンスに戻って変更するのに問題なく動作しますが、MultiTableHoldingViewのsetFreshWaterColorおよびsetSaltwaterColorメソッドのインスタンスを呼び出したいです。

MultiTableHoldingViews ヘッダーを関連するテーブルビュー (EnviroTV) にインポートしたので、スーパービュー メソッドについて認識しています。しかし、self.superview で 2 つのメソッドのいずれかを呼び出そうとすると、メソッドが表示されず、それらを完全に入力すると、次のエラーが発生します。

「UIView」の目に見えるインターフェイスがないため、セレクター「setFreshWaterColor」が表示されます

だから私はスーパービューがどのような種類のオブジェクトであるか、そしてそれが「スーパービューUIViewControllerWrapperViewのクラス」であることを確認しました

これを検索すると、どうやら "

これは、フレームワークによって使用されるプライベート ビューです。あなたはそれを変更するべきではありません。」

ここで明らかに何かが欠けています - MultiTableHoldingView のインスタンスでメソッドを呼び出すにはどうすればよいですか?

前もって感謝します

サイモン

Doh - danypata がコメントで言及しているように、その単なる委任 - 以下の回答として、これを行った方法を正確に投稿しました。委任がどのように機能するかをできるだけ明確にしようとしました

4

1 に答える 1