2016-08-12 30 views
0

關於繼承簡單的問題繼承在一個UIView文件

我有一個標準的程序與主視圖:

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爲

@interface BackView : MasterViewController 

它允許它從MasterViewController繼承它需要的變量。

問題是這不起作用; BackView必須從UIView繼承才能使用DrawRect進行繪製。其中infoToBackView是發送所需的變量BackView的方法

[self infoToBackView]; 
[backView setNeedsDisplay]; 

:因此,調用UIView的BackView之前,我必須把它所需要的變量圖。

64,000美元的問題:我怎樣纔能有一個從MasterViewController繼承並具有drawRect的BackView?

+3

你不能這樣做,因爲Objective- C沒有多重繼承。你不應該這樣做,因爲視圖控制器不是視圖。你最好多思考一下設計。您不需要從視圖控制器繼承變量 - 視圖控制器應該使用該信息並將其傳遞給視圖。 – Abizern

+1

你不能。如果你的視圖要繪製自己,它需要是一個UIView子類。爲什麼將這些值傳遞給視圖是一個問題? –

+0

將值傳遞給視圖不是問題。我只是認爲使用繼承會使它更容易。 – mbs31

回答

1

BackView是一個視圖,它是設計繪製的東西。 ViewController是設計來管理一個視圖Herarchy。

他們不是一回事。一架是飛機,另一架是機場!你不能飛機場...... UIView的子類是設計繪製。如果你想在屏幕上繪製(文本,形狀..),創建一個UIView的子類。如果您想管理應用程序故事板中的場景,請創建UIViewController的子類。

drawRect:是UIView的

的方法,現在你可以從你的viewController傳遞變量視圖,就像一個標籤(另一種視圖)收到一個文本知道要顯示的內容。

例如,在您的視圖控制器,你可以有:

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

爲了更好地理解MVC設計模式,請reffer蘋果DOC:https://developer.apple.com/library/mac/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html