2016-08-12 24 views
0

簡単な質問私はマスタービューで標準プログラムを持っている継承継承について

MasterViewController.h

enter code here @interfaceのMasterViewController:のUIViewController

使用描画のためのサブビュー:

MasterViewController.m

frame = CGRectMake(xo, yo, side*width, side*height); // maxSide 
backView = [[BackView alloc] initWithFrame:frame]; 
[backView setBackgroundColor:[UIColor whiteColor]]; 
[self infoToBackView]; 
[self.view addSubview:backView]; 

BackView.h

@interface BackView : UIView 

BackView.mは、そののdrawRectを持っている:私は

- (void)drawRect { 
    : 
    : 
} 

問題は、私はBackViewをしたいということですMasterViewControllerから継承する、つまり私はが必要ですBackview.hは、それがMasterViewControllerから必要な変数を継承することができます

@interface BackView : MasterViewController 

されるように。

問題はこれが機能しないことです。 BackViewはDrawViewで描画できるようにUIViewから継承する必要があります。 infoToBackViewがBackViewに必要な変数を送信する方法である

[self infoToBackView]; 
[backView setNeedsDisplay]; 

:したがって、UIViewのBackViewを呼び出す前に、私はそれを、それは、描画に必要な変数を送信する必要があります。

$ 64,000質問:MasterViewControllerから継承し、drawRectを持つバックビューを持つにはどうしたらいいですか?

+3

あなたはObjective-ので、これを行うことはできませんCには複数の継承がありません。ビューコントローラはビ​​ューではないので、これを行うべきではありません。あなたはもう少しデザインについて考えるのが良いでしょう。ビューコントローラから変数を継承する必要はありません。ビューコントローラは、その情報を使用してビューに渡す必要があります。 – Abizern

+1

できません。ビュー自体が描画される場合は、UIViewサブクラスである必要があります。なぜ値をビューに渡すのが問題なのですか? –

+0

ビューに値を渡すことは問題ではありません。私はちょうど継承を使用すると簡単になると思った。 – mbs31

答えて

1

BackViewはビューです。何かを描画するデザインです。 ViewControllerは、ビューのハラキーを管理するための設計です。

これらは同じものではありません。 1つは飛行機、もう1つは空港です!あなたは空港を飛ぶことはできません... UIViewのサブクラスは描画する設計です。画面上に(テキスト、図形など)を描画する場合は、UIViewのサブクラスを作成します。あなたのアプリストーリーボードでシーンを管理したい場合は、UIViewControllerのサブクラスを作成します。

drawRect:は、ラベル(ビューの別の種類)が表示するかを知るためにテキストを受け取っように今、あなたは、あなたのViewControllerから、あなたのビューに変数を渡すことができUIViewの

の方法です。

あなたのViewControllerでたとえば、あなたが持つことができます。

self.myBackView.color = [UIColor blueColor]; 
self.myBackView.progress = .5; 
self.myBackView.text = @"MVC is awesome"; 

をMVCデザインパターンをよりよく理解するために、Appleのドキュメントにrefferてください:https://developer.apple.com/library/mac/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html