2016-08-12 27 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