如何将 UIView 与从 ViewController 继承的属性或变量一起使用?

How do you use UIView with properties or variables inherited from ViewController?

我有 UIViewController 命名为 ParentViewController.h 和 .m

然后我在这个 ParentViewController.

里面添加了 UIView

我添加了 uiview.huiview.h 并分配给 UIView 40=]ParentViewController.

来自

-(void)drawRect:(CGRect)rect {}

它位于 uiview.m,我需要访问 ParentViewController 中的属性。

我该怎么做?我使用 UIView 错了吗?

ParentViewController.h

#import <UIKit/UIKit.h>

@interface ParentViewController : UIViewController

    //I want my uiview to access this variable.
    @property (nonatomic, strong) NSMutableArray *usedByUIView; 

@end

ParentViewController.m

#import "ParentViewController.h"
#import "uiview.h"

@implementation ParentViewController

- (void)viewDidLoad {
 ...
}
@end

uiview.h

#import <UIKit/UIKit.h>

@interface uiview : UIView
@end

uiview.m

#import "uiview.h"

@implementation uiview

-(id) initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if(self){
}
return self;
}

- (void)drawRect:(CGRect)rect {
    NSLog(@"start drawing using the data from usedByUIView");
}
@end

关于这个主题有一些答案,但总而言之,您没有,至少不是您这样做的方式。 UIView 无权访问其视图控制器,因此不需要访问权限。当然,在现实世界中,有时围绕独立视图进行编码的开销是不值得的,因此人们会侵入控制器访问权限。这可以通过在视图中保留一个实例变量,指向控制器,并在视图加载后分配对它的引用,或者通过覆盖 init 以便您也传递一个视图控制器,或许多其他方式来完成。但在这样做之前,请仔细考虑为什么要从视图访问控制器的逻辑,看看是否有其他方法可以做到这一点。